Web API控制器中的多个HttpPost方法
我开始使用MVC4 Web API项目,我有多种HttpPost
方法的控制器。控制器如下所示:
public class VTRoutingController : ApiController{
[HttpPost]
public MyResult Route(MyRequestTemplate routingRequestTemplate)
{
return null;
}
[HttpPost]
public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}
这里MyRequestTemplate
代表负责处理请求中的Json的模板类。
当我使用Fiddler发出请求时,http://localhost:52370/api/VTRouting/TSPRoute
或者http://localhost:52370/api/VTRouting/Route
出现错误:
找到多个符合要求的动作
如果我删除上述方法之一,则可以正常工作。
我尝试修改中的默认路由表global.asax
,但仍然出现错误,我认为在global.asax中定义路由时遇到问题。这是我在global.asax中所做的事情。
public static void RegisterRoutes(RouteCollection routes){
routes.MapHttpRoute(
name: "MyTSPRoute",
routeTemplate: "api/VTRouting/TSPRoute",
defaults: new { }
);
routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/VTRouting/Route",
defaults: new { action="Route" }
);
}
我正在使用POST在Fiddler中发出请求,在RequestBody中为MyRequestTemplate传递json。
回答:
您可以在一个控制器中执行多个操作。
为此,您必须执行以下两项操作。
首先用
ActionName
属性装饰动作[ActionName("route")]
public class VTRoutingController : ApiController
{
[ActionName(“route”)]
public MyResult PostRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
[ActionName(“tspRoute”)]
public MyResult PostTSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}
其次在
WebApiConfig
文件中定义以下路由。// Controller Only
// To handle routes like
/api/VTRouting
config.Routes.MapHttpRoute(
name: “ControllerOnly”,
routeTemplate: “api/{controller}”
);
// Controller with ID
// To handle routes like
/api/VTRouting/1
config.Routes.MapHttpRoute(
name: “ControllerAndId”,
routeTemplate: “api/{controller}/{id}”,
defaults: null,
constraints: new { id = @”^\d+$” } // Only integers
);
// Controllers with Actions
// To handle routes like
/api/VTRouting/route
config.Routes.MapHttpRoute(
name: “ControllerAndAction”,
routeTemplate: “api/{controller}/{action}”
);
以上是 Web API控制器中的多个HttpPost方法 的全部内容, 来源链接: utcz.com/qa/426010.html