是否可以使用相同的路由托管MVC和Web API控制器,但是可以提供不同的内容?
我想要的是根据请求的Accept标头中的内容类型选择正确的控制器。
例如:
GET /users/1 [Accept: text/html]
将调用MVC响应。
GET /users/1 [Accept: application/json]
将调用Web API响应。
我意识到可以直接从Web API渲染Razor视图并返回HTML,但是我无法使用MVC的优点来渲染我的主站点(除非有人告诉我你可以做任何事情) MVC可以做的Web API!)
相关(但不完全相同)的问题:ASP.NET MVC 4 ApiController and Normal Controller Routes
答案 0 :(得分:3)
如果您的问题已经发布并开箱即用,请不要。
您可以在HttpHandler或HttpModule中做一些好事来检测请求的数据类型并将您的请求重定向到您的WebAPI项目。
或者,您可以定义路由并让您的WebAPI项目接受具有.json或甚至.xml扩展的请求,并根据您的路由适当地发出API请求
routes.MapRoute("Default", "{controller}/{action}/{id}.json", new { controller = "Home", action = "Index" });
编辑1 :如果您需要处理多种内容类型,您可以像下面一样定义路线并在控制器操作中处理内容类型
routes.MapRoute("Default", "{controller}/{action}/{id}.{contentType}", new { controller = "Home", action = "Index" });