Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同名称空间中使用重复的控制器名称进行路由模板化_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# 在不同名称空间中使用重复的控制器名称进行路由模板化

C# 在不同名称空间中使用重复的控制器名称进行路由模板化,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我正在实现一些东西,希望在更传统的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.MapRou

我正在实现一些东西,希望在更传统的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视图,这似乎是一个没有实际意义的问题。不管怎样,我将把这个问题留给大家看是否有人有答案。

如果Owin/Katana处于打开状态,则可以使用
app.Map
隔离请求管道。 我使用这两种启动配置来处理这些场景:

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

app.Map("/api", builder =>
{
    var config = new HttpConfiguration();
    builder.UseWebApi(config);
});
2) 从MVC中的route集合中省略
/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");