我想在Web API控制器中实现一个自定义操作,该控制器使用ASP.Net MVC 4 Web API框架获取多个参数。
public class APIRepositoryController : ApiController
{
...
[HttpGet, ActionName("retrieveObservationInfo")]
public ObservationInfo retrieveObservationInfo(
int id,
String name1,
String name2)
{
//...do something...
return ObservationInfo;
}
...
}
这样我就可以在网络浏览器中调用URL,如:
"http://[myserver]/mysite/api/APIRepository/retrieveObservationInfo?id=xxx&name1=xxx&name2=xxx"
然而,这从未奏效。
我还需要配置什么,例如WebAPI路由?目前我只使用默认的WebApiConfig.cs
。
提前致谢
答案 0 :(得分:4)
默认情况下,在您的情况下,Web API将根据HTTP谓词而不是操作名称调度操作:
GET http://[myserver]/mysite/api/APIRepository/?id=xxx&name1=xxx&name2=xxx
要根据操作名称(如您所愿)进行调度,您需要在默认路由之前添加以下路由:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
请注意,您目前无法(至少不会没有黑客攻击)可靠地在单个控制器中组合基于动词和动作名称的路由。您可以阅读有关Web API routing here的更多信息。