我的Web API路由有什么问题?

时间:2017-03-08 11:24:53

标签: asp.net asp.net-mvc asp.net-web-api asp.net-mvc-5 asp.net-mvc-routing

我有一个控制器,其中包含以下两个操作签名。我正在使用会话与属性路由,因为我一直在努力使这项工作成为可能,并且常规移除了2个问题中的一个。

[HttpGet]
[ResponseType(typeof(IEnumerable<EmployeeBindingModel>))]
public async Task<IHttpActionResult> ReadAll()

当我使用URL:http://localhost:53093/api/Employees/ReadAll从邮递员调用此邮件时,我得到以下JSON:

{
  "Message": "The request is invalid.",
  "MessageDetail": "The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Threading.Tasks.Task`1[System.Web.Http.IHttpActionResult] Read(Int32)' in 'AcmeSoft.WebApi.Controllers.EmployeesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}

另一个动作是:

[HttpGet]
[ResponseType(typeof(EmployeeBindingModel))]
public async Task<IHttpActionResult> Read(int id)

当我用这个URL调用它时:http://localhost:53093/api/Employees/Read/5我得到了预期的员工JSON记录。

我的路由在WebApiConfig

中设置如下
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new {id = RouteParameter.Optional});

我一直使用这个标准样板,今天是我第一次收到错误。为什么地球上没有参数的动作会产生一个? ReadAll从未有过参数,所以它甚至都不是鬼。我删除了所有没有更改的ASP.NET临时文件。

1 个答案:

答案 0 :(得分:2)

在WebApiConfig中进行更改:

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

也可以在routeTemplate中使用操作