MVC和Web API控制器:相同的路由,不同的内容

时间:2014-01-15 15:25:52

标签: asp.net-mvc asp.net-web-api

是否可以使用相同的路由托管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

1 个答案:

答案 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" });