我有一个控制器,其中包含以下两个操作签名。我正在使用会话与属性路由,因为我一直在努力使这项工作成为可能,并且常规移除了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临时文件。
答案 0 :(得分:2)
在WebApiConfig中进行更改:
//config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional});
也可以在routeTemplate中使用操作