13

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

如果它们正在处理相同的模型,则需要一组控制器来呈现 HTML 和另一组用于 JSON/XML 似乎很疯狂。

更新Darrel Miller 已经为 Razor 编写了一个 ViewEngineFormatter可能会成功,尽管还没有尝试过。

4

5 回答 5

10

过去我在 StackOverflow 上问过类似的问题,因为我想做同样的事情。然而,我最终得到了一个“Api”区域和一组控制器,以及一组用于网站的标准 MVC 控制器。

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

我认为,如果我坚持将两者结合起来的目标,我可能最终会得到过于复杂的控制器或无法达到最佳的用户体验。因此,虽然这不是您问题的直接答案,但根据我的经验,无法做到这一点可能不是一件坏事。

相反,我最终得到了我的大多数控制器委托给的一组丰富的构建器和命令。这样我可以重用大部分控制器逻辑,同时能够为 API 和 Web 做特定的事情:

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

于 2012-05-16T12:00:04.837 回答
5

是的,它就是这样设计的:用于数据的 Web API 和用于渲染视图的 MVC。我知道有些人会尝试向 Web API 添加视图引擎支持,但它不是为此而设计的。

我个人对此的看法是,MVC 和 Web API 之间的这种平行世界(这是大多数批评的根源,而社区普遍称赞该产品)主要是由于 Web API 已添加到 MVC 中而没有参考。 (或对它的了解)。

正如 Jon Galloway 在最近的播客中所说,如果团队拥有他们现在拥有的 HTTP 知识(以及他们当时没有的 REST API 现在流行的事后观察),他们将只设计一个提供数据并渲染的管道观点一致。

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

于 2012-05-16T11:09:16.590 回答
3

如果它们正在处理相同的模型,则需要一组控制器来呈现 HTML 和另一组用于 JSON/XML 似乎很疯狂。

AFAIK,就是这样。标准控制器应该用于呈现 HTML 和用于 JSON/XML 的 ApiControllers。

于 2012-05-16T09:55:13.400 回答
3

如果它们正在处理相同的模型,则需要一组控制器来呈现 HTML 和另一组用于 JSON/XML 似乎很疯狂。

Web API 正是它所称的 - 一种用于创建 API 的技术。

如果您正在创建一个 ASP.NET MVC 应用程序并希望为您自己的目的返回一些 JSON,那么您不需要内容协商等。因此您不需要 Web API(只需使用普通的旧 JsonResult)。

如果您想创建一个可重用的 API,那么您需要 Web API,但您的客户端应用程序应该以与其他人相同的方式使用它。

Web API 并不是用来“钉”所有非 HTML 请求的“锤子”——在需要时使用它。

于 2012-05-16T10:17:38.143 回答
1

我正在寻找与此类似的东西,但不完全是。通过搜索网络,我找到了 Fredrik Normen 的几篇文章。他写了这个确切的问题空间,并在列出的第二篇文章中实际确定了第三方解决方案。基本上,该解决方案涉及创建一个自定义,该自定义MediaTypeFormatter知道如何使用 Microsoft 提供的 Razor 引擎(通过使用第三方库)处理视图。

希望微软很快会在 Web API 中实现一些东西,因为超媒体似乎正在获得牵引力。

希望这可以帮助!

于 2013-12-18T22:30:20.570 回答