我正在实现一些我希望将web api放在更传统的MVC实现旁边的东西。
结构如下:
+ 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视图,似乎这可能是一个没有实际意义的点。无论如何,我会留下来看看是否有人有答案。
答案 0 :(得分:0)
使用Owin / Katana on可以使用app.Map
来隔离请求管道。
我使用这两个启动配置来处理这些情况:
1)使用Owin Startup文件在/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");