在ASP.NET WebAPI中重定向路由

时间:2013-05-17 12:52:48

标签: asp.net asp.net-web-api asp.net-routing

没关系:

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { id = System.Web.Http.RouteParameter.Optional });

但我想将传入的请求重定向到ApiFolder文件夹的类 enter image description here

2 个答案:

答案 0 :(得分:0)

您应该在路线配置中指定命名空间:

var r = GlobalConfiguration.Configuration.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}",
        defaults: new { id = System.Web.Http.RouteParameter.Optional },
);
if( r.DataTokens == null ){
  r.DataTokens = new RouteValueDictionary();
}
r.DataTokens["Namespaces"] = new string[] {"ApiFolder"};

答案 1 :(得分:0)

Kenneth的建议不会像评论中所说的那样奏效。

但是,您可以编写自己的IHttpControllerSelector实现,并仅在映射api路由时分配它。我使用this article中的实现作为基础并对其进行了修改。

然后它只是在WebApiConfig中映射路由之后替换默认选择器的小问题,就像这样(其中CustomControllerSelector是我的实现):

    public static void Register(HttpConfiguration configuration)
    {
        var apiRoute = configuration.Routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional, controllerNamespace = "api" }
        );

        configuration.Services.Replace(typeof(IHttpControllerSelector), new CustomControllerSelector(configuration));
    }