C# 在不同名称空间中使用重复的控制器名称进行路由模板化
我正在实现一些东西,希望在更传统的MVC实现旁边有一个web api 结构如下所示: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
+ 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");