Web API - 默认情况下渲染Razor视图?

Jam*_*ley 13 asp.net-mvc asp.net-web-api

如何让Web API使用它返回的模型呈现Razor视图?设置accept头(或.extension)时只有XML/JSON?这甚至可能吗?

如果他们正在使用相同的模型,那么要求一组控制器用于呈现HTML而另一组用于JSON/XML似乎很疯狂.

更新 Darrel Miller已经为Razor编写了一个ViewEngineFormatter,虽然还没有尝试过,但它可以解决这个问题.

Pau*_*ell 10

我过去在StackOverflow上问了一个类似的问题,因为我想做同样的事情.但是,我最终得到了一个"Api"区域和一组控制器,以及一组标准的MVC控制器.

事后来看,这实际上并不是件坏事.我发现无论如何我倾向于在每组控制器中做不同的事情.我的观点不仅仅是CRUD,而且往往包含额外的上下文数据,因此返回特定于该页面的视图模型是很好的.

我想如果我坚持将两者结合起来的目标,我可能最终会遇到过于复杂的控制器或用户体验不尽如人意的最佳状态.虽然这不是你问题的直接答案,但根据我的经验,不能做到这一点可能不是一件坏事.

相反,我最终得到了一组丰富的构建器和命令,我的大多数控制器都委托给它们.这样我可以重用大多数控制器逻辑,同时能够针对API执行特定的事情:

http://www.paulstovell.com/clean-aspnet-mvc-controllers


Ali*_*tad 5

是的,它是如何设计的:用于数据的Web API和用于渲染视图的MVC.我知道有些人会尝试为Web API添加视图引擎支持,但它不是为它设计的.

我个人对此的看法是,MVC和Web API之间的这个平行世界(当社区普遍赞扬该产品时,这是大多数批评的来源)主要是因为Web API已被添加到MVC而没有参考(或知识).

正如Jon Galloway在最近播客中所说,如果团队拥有他们现在拥有的HTTP知识(以及他们现在没有的REST API流行度),那么他们只会设计一个提供数据和渲染的管道.视图一样.

我只能推测未来版本的MVC/Web API将作为单个管道呈现.事实上,这个平行的世界可能是一个在不久的将来统一它们的精心计划.


Dar*_*rov 3

如果需要一组控制器用于渲染 HTML,而另一组控制器用于 JSON/XML(如果它们在相同的模型上工作),这似乎很疯狂。

AFAIK,就是这样。应使用标准控制器来呈现 HTML,并使用 ApiControllers 来呈现 JSON/XML。