我开始使用MVC4 Web API项目,我有多种HttpPost方法的控制器。控制器如下所示:
HttpPost
控制者
public class VTRoutingController : ApiController { [HttpPost] public MyResult Route(MyRequestTemplate routingRequestTemplate) { return null; } [HttpPost] public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate) { return null; } }
这里MyRequestTemplate代表负责处理请求中的Json的模板类。
MyRequestTemplate
错误:
当我使用Fiddler发出请求时,http://localhost:52370/api/VTRouting/TSPRoute或者http://localhost:52370/api/VTRouting/Route 出现错误:
http://localhost:52370/api/VTRouting/TSPRoute
http://localhost:52370/api/VTRouting/Route
找到多个符合要求的动作
如果我删除上述方法之一,则可以正常工作。
Global.asax
我尝试修改中的默认路由表global.asax,但仍然出现错误,我认为在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
[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文件中定义以下路由。
WebApiConfig
// Controller Only
// To handle routes like /api/VTRouting config.Routes.MapHttpRoute( name: “ControllerOnly”, routeTemplate: “api/{controller}” );
/api/VTRouting
// 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 );
/api/VTRouting/1
// Controllers with Actions // To handle routes like /api/VTRouting/route config.Routes.MapHttpRoute( name: “ControllerAndAction”, routeTemplate: “api/{controller}/{action}” );
/api/VTRouting/route