0

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

提前致谢

4

1 回答 1

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 }
);

请注意,您目前不能(至少在没有 hack 的情况下)不能在单个控制器中可靠地结合基于动词和动作名称的路由。您可以在此处阅读有关Web API 路由的更多信息。

于 2013-03-01T00:23:22.513 回答