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

Asp.net mvc MVC和Web API控制器:相同的路由,不同的内容,asp.net-mvc,asp.net-web-api,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响应 我意识到可以呈现Razor视图并直接从Web API返回HTML,但是我无法使用MVC Goods来呈现我的主站点(除非有人告诉我,你可以在Web API中完成MVC可以完成的一切!

是否可以使用相同的路由托管MVC和Web API控制器,但提供不同的内容

我希望根据请求的Accept标头中的内容类型选择正确的控制器

例如:

GET/users/1[Accept:text/html]
将调用MVC响应
GET/users/1[Accept:application/json]
将调用Web API响应

我意识到可以呈现Razor视图并直接从Web API返回HTML,但是我无法使用MVC Goods来呈现我的主站点(除非有人告诉我,你可以在Web API中完成MVC可以完成的一切!)


相关(但不是同一个)问题:

因为你的问题已经发布,而且是现成的,所以没有

您可以在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" });

我喜欢HttpHandler或HttpModule的想法,我正在考虑向MVC控制器添加逻辑,以便在请求不是HTML的情况下重定向到api/users/1,但将其进一步向上移动听起来是个更好的主意。我对扩展的想法不太感兴趣,因为我们有多种内容类型(json、xml和messagepack)和属性路由,而不是全局路由。添加了一个带有处理contentType的替代方法的编辑,除了只过滤允许的扩展类型外,还可以使用正则表达式过滤器。