【问题标题】:Redirecting route in ASP.NET WebAPIASP.NET WebAPI 中的重定向路由
【发布时间】:2013-05-12 15:39:29
【问题描述】:

没关系:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    但是,您可以编写自己的 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));
        }
    

    【讨论】:

      【解决方案2】:

      你应该在你的路由配置中指定你的命名空间:

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

      【讨论】:

      • r.DateTokens 为空,我无法设置 ["Namespaces"]。
      • 你应该做一个null-check 并实例化一个新的RouteValueDictionary,如果它是null。我编辑了我的答案。
      • Property or indexer System.Web.Http.Routing.IHttpRoute.DataTokens cannot be assigned to -- it is read only DataTokens 属性是只读的!
      • 嗯,你是对的,这实际上是行不通的。据我所知,MapHttpRoute 不支持此功能
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多