ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#WebApi控制器(状态控制器目前有2个Get方法,1个返回List,第二个返回Single Item)

2019-06-08 22:05:04  阅读:185  来源: 互联网

标签:c asp-net asp-net-web-api odata asp-net-web-api-routing


我的WebApiConfig:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();


            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Applicant>("Applicants");
            builder.EntitySet<Country>("Countries");
            builder.EntitySet<Program>("Programs");
            builder.EntitySet<Campus>("Campuses");
            builder.EntitySet<AcademicYear>("AcademicYears");
            builder.EntitySet<Citizenship>("Citizenships");
            builder.EntitySet<ProgramChoice>("ProgramChoices");
            builder.EntitySet<Application>("Applications");
            builder.EntitySet<ProvinceState>("States");

            config.MapODataServiceRoute(
              routeName: "ODataRoute",
              routePrefix: null,
              model: builder.GetEdmModel());




            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{key}",
                defaults: new { key = RouteParameter.Optional }
            );
        }
    }

我的控制器获取方法返回项目列表:

   [EnableQuery]
        public IQueryable<ProvinceState> Get()
        {
            return db.ProvinceStates;
        }

我的控制器获取方法返回单个项目:

[EnableQuery]
public SingleResult<ProvinceState> Get([FromODataUri] string key)
{
    IQueryable<ProvinceState> result = db.ProvinceStates.Where(c => c.ProvinceStateCode == key);
    return SingleResult.Create(result);
}

问题如下:

>当我请求LocalHost:### / States时,Get方法正确返回状态列表而没有任何问题.
>但是当我请求LocalHost:### / States(‘AL’)时,为了获得特定项目,我收到以下错误.

HTTP错误404.0 – 未找到

您要查找的资源已被删除,名称已更改或暂时不可用.

在调试时,并且在向返回单个项的get方法发出请求时,调试器不会达到单项GET的断点.但它在请求List GET方法时会这样做.

任何建议或帮助将非常感谢,提前感谢.

解决方法:

由于您具有由ProvinceStateCode和CountryCode组成的组合键,因此需要修改Get方法以接受这两个值.

[HttpGet]
[ODataRoute("States(ProvinceStateCode={stateCode},CountryCode={countryCode})")]
[EnableQuery]
public IHttpActionResult Get([FromODataUri] string stateCode, [FromODataUri] string countryCode)
{
    var result = db.ProvinceStates.FirstOrDefault(c => c.ProvinceStateCode == stateCode && c.CountryCode == countryCode);

    if (result == null)
    {
        return NotFound();
    }
    else
    {
        return Ok(result);
    }
}

然后检索各个状态,如下所示:

GET http://host/States(ProvinceStateCode='AL',CountryCode='US')

标签:c,asp-net,asp-net-web-api,odata,asp-net-web-api-routing
来源: https://codeday.me/bug/20190608/1200748.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有