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

Asp.net mvc 4 ASP.Net Web API自定义操作采用多个参数?,asp.net-mvc-4,asp.net-web-api,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( i

我想在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;
    }
    ...
}
这样我就可以在web浏览器中调用URL,如:

"http://[myserver]/mysite/api/APIRepository/retrieveObservationInfo?id=xxx&name1=xxx&name2=xxx"
然而,这从未奏效

是否还有其他需要配置的内容,例如WebAPI路由?目前我只使用默认的
WebApiConfig.cs


提前感谢

在您的情况下,默认情况下,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 }
);

请注意,您目前无法(至少在没有hacks的情况下)在单个控制器中可靠地组合基于动词的路由和动作名称路由。您可以阅读更多信息。

默认情况下,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 }
);
请注意,您目前无法(至少在没有hacks的情况下)在单个控制器中可靠地组合基于动词的路由和动作名称路由。你可以阅读更多关于