找到多个操作
本文关键字:操作 | 更新日期: 2023-09-27 18:05:46
我有不同类型参数的动作
public class MyController : ApiController
{
[HttpPost]
public UpdateFeatureResponse UpdateFeature(UpdateFeatureResuest reqResuest)
{
return new UpdateFeatureResponse { IsSuccess = true };
}
[HttpPost]
public DeleteFeatureResponse DeleteFeature(DeleteFeatureRequest request)
{
return new DeleteFeatureResponse{ IsSuccess = true };
}
}
我的请求类型是这样的:
public class UpdateFeatureResuest
{
public int Id { get; set; }
public string Feature { get; set; }
}
public class UpdateFeatureResponse
{
public bool IsSuccess { get; set; }
}
public class DeleteFeatureRequest
{
public int Id { get; set; }
}
public class DeleteFeatureResponse
{
public bool IsSuccess { get; set; }
}
Route is here:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当我发送请求(http://localhost:52285/api/My/UpdateFeature
)通过fiddler它返回HTTP/1.1 500内部服务器错误
错误信息是:
{"message":"发生错误","exceptionMessage":"发现了多个与请求匹配的操作:'r'nUpdateFeature在类型WebGUI.Controllers上。MyController'r'nDeleteFeature on type WebGUI.Controllers.MyController","exceptionType":"System. controller . "InvalidOperationException"、"加":"……
你的路由是错误的,因为它没有指定动作名称,所以它把UpdateFeature
部分作为ID参数。改成这样:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
最好使用Route
属性
[RoutePrefix("myapi")]
public class MyController : ApiController
{
[Route("update")]
[HttpPost]
public UpdateFeatureResponse UpdateFeature(UpdateFeatureResuest reqResuest)
{
return new UpdateFeatureResponse { IsSuccess = true };
}
[Route("delete")]
[HttpPost]
public DeleteFeatureResponse DeleteFeature(DeleteFeatureRequest request)
{
return new DeleteFeatureResponse{ IsSuccess = true };
}
}
现在将此添加到config.Routes.MapHttpRoute()
之前的WebApiConfig
config.MapHttpAttributeRoutes();