如何让Web API使用它返回的模型呈现Razor视图?设置accept头(或.extension)时只有XML / JSON?这甚至可能吗?
如果他们正在使用相同的模型,那么要求一组控制器用于呈现HTML而另一组用于JSON / XML似乎很疯狂。
更新 Darrel Miller已经编写了一个ViewEngineFormatter for Razor可能会有所作为,但尚未尝试过。
答案 0 :(得分:10)
我过去在StackOverflow上问了一个类似的问题,因为我想做同样的事情。但是,我最终得到了一个“Api”区域和一组控制器,以及一组标准的MVC控制器。
事后看来,这实际上并不是件坏事。我发现无论如何我倾向于在每组控制器中做不同的事情。我的观点不仅仅是CRUD,而且往往包含额外的上下文数据,因此返回特定于该页面的视图模型是很好的。
我认为如果我坚持将两者结合起来的目标,我可能最终会遇到过于复杂的控制器或者用户体验不尽如人意的最佳状态。因此,虽然这不是你问题的直接答案,但根据我的经验,不能做到这一点可能不是一件坏事。
相反,我最终得到了一组丰富的构建器和命令,我的大多数控制器都委托给它们。这样我可以重用大多数控制器逻辑,同时能够针对API执行特定的事情:
答案 1 :(得分:5)
是的,它是如何设计的:用于数据的Web API和用于渲染视图的MVC。我知道有些人会尝试向Web API添加视图引擎支持,但它不是为它
我个人认为,MVC和Web API之间存在平行世界(这是大多数批评的来源,而社区普遍赞扬该产品)主要是因为Web的事实API已添加到MVC而没有引用(或知道它)。
正如Jon Galloway在最近播客中所说,如果团队拥有他们现在拥有的HTTP知识(以及他们现在没有的REST API流行度),他们只会设计一个管道服务数据和渲染视图一样。
我只能推测MVC / Web API的 future 版本将显示为单一管道。事实上,这个平行的世界可能是一个在不久的将来统一它们的精心计划。
答案 2 :(得分:4)
要求一组控制器来呈现HTML似乎很疯狂 如果他们正在使用相同的模型,那么另一个用于JSON / XML。
AFAIK,就是这样。应使用标准控制器为JSON / XML呈现HTML和ApiControllers。
答案 3 :(得分:3)
要求一组控制器来呈现HTML似乎很疯狂 如果他们正在使用相同的模型,那么另一个用于JSON / XML。
Web API就是它所谓的 - 一种用于创建API的技术。
如果您正在创建ASP.NET MVC应用程序并希望为自己的目的返回一些JSON,那么您不需要内容协商等,因此您不需要Web API(只需使用普通的旧JsonResult)。
如果您想创建一个可重用的API而不是Web API,那么您的客户端应用程序应该以与其他人相同的方式使用它。
Web API并不意味着“钉住”所有非HTML请求的“锤子” - 在您需要时使用它。
答案 4 :(得分:1)
我正在寻找与此相似的东西,但并非完全如此。通过搜索网络,我找到了弗雷德里克诺曼的一些帖子。他撰写了关于这个确切问题空间的文章,并在列出的第二篇文章中实际确定了第三方解决方案。基本上,该解决方案涉及创建一个自定义MediaTypeFormatter
,它知道如何使用Microsoft提供的Razor引擎处理视图(through the use of a third-party library)。
希望微软能够很快在Web API中实施一些东西,因为超媒体似乎正在获得动力。
希望这有帮助!