ASP.Net Web API自定义操作采用多个参数?

时间:2013-03-01 00:12:34

标签: asp.net-mvc-4 asp.net-web-api

我想在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

提前致谢

1 个答案:

答案 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的更多信息。