【问题标题】:Route templating with duplicate controller names in different namespaces在不同命名空间中使用重复控制器名称的路由模板
【发布时间】:2018-03-27 13:34:26
【问题描述】:

我正在实现一些东西,我希望在更传统的 MVC 实现旁边有一个 Web api。

结构如下:

+ Controllers
  + Web
    - Product.cs
  + Api
    - Product.cs

在我的代码中,我想将通过 /api 传入的所有请求路由到 Api 命名空间,并将其他所有请求路由到 Web 命名空间,例如:

// Want to indicate that these should all choose the the Api namespace
routes.MapRoute(
    name: "api_route",
    template: "api/{controller}/{action}/{id?}");

// Indicate that these should all choose the from the Web namespace.
routes.MapRoute(
    name: "default_route",
    template: "{controller}/{action}/{id?}");

据我所知,没有惯用的方式来指示从哪个命名空间中进行选择。有一个更好的方法吗?还是我需要手动指定每个控制器的路由?

编辑: 事实上,如果使用 Razor 视图,这似乎是一个有争议的问题。无论如何,我会留下来看看是否有人有答案。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    在 Owin/Katana 开启的情况下,可以使用app.Map 来隔离请求管道。 我使用这两种启动配置来处理这些场景:

    1) 使用 Owin 启动文件在 /api 托管 WebApi。

    app.Map("/api", builder =>
    {
        var config = new HttpConfiguration();
        builder.UseWebApi(config);
    });
    

    2) 在 MVC 中的路由集合中省略 /api(在 Global.asax 中的启动时设置)

    RouteTable.Routes.MapMvcAttributeRoutes();
    RouteTable.Routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional });
    
    // Explicitly tell this route to be solely handled by the Owin pipeline.
    RouteTable.Routes.MapOwinPath("/api");
    

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 2015-03-12
      • 1970-01-01
      • 2015-07-05
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多