【问题标题】:Making calls to a Stand-Alone Web API to populate ViewModels in ASP.NET MVC调用独立 Web API 以在 ASP.NET MVC 中填充 ViewModel
【发布时间】:2016-12-09 07:24:35
【问题描述】:

假设我有一个独立的 ASP.NET Core Web API 作为自己的项目(因为我不想将它与我的 MVC 应用程序合并)

我现在想创建一个 MVC Web 应用程序(另一个项目,但相同的解决方案),它将调用 API。我知道对于 ajax 请求,我将直接通过 JavaScript 直接调用 API。 但是,当用户请求页面时,我有点困惑 MVC 控制器如何调用相同的 API 来填充 ViewModel 并发送到 View,即http://myurl/books/1

我知道,如果我使用的是完全客户端的 Angular 之类的东西,我就不会遇到这个问题。

【问题讨论】:

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


    【解决方案1】:

    这是个好问题。我能想到三种不同的方法:

    • 第一个是使用 HTTPClient 对象从 MVC 控制器调用相同的 API。在服务器端调用“你自己”可能看起来有点奇怪,但它确实有效。在我看来,这不是一个很好的解决方案,因为您正在丢失类型检查,并且您还将通过网络进行不必要的调用,并且您还必须解析并将响应从 WebAPI 转换回您的 .net 对象.

    • 第二种方法是将 API 中的所有逻辑移动到一个新项目中,并将其全部编译为 DLL。然后,您的 Web Api 可以调用库中的代码,您的 MVC 项目也可以这样做。一个很好的方法。

    • 第三种方法是按照您的建议进行操作 - 根本不要在 MVC 项目的服务器端填充模型,而只需从客户端完成。是的,这对 Angular 来说效果很好,但你也可以使用标准的 JQuery 或 Knockout 自己完成。这种方法意味着要编写更多的客户端javascript(使用Typescript!),但您最终会得到更好的关注点分离和更清洁的解决方案。

    【讨论】:

    • 感谢您的深入回答!另一个问题。您能否简要介绍一下身份验证如何适用于 API。例如,在 MVC 应用程序中,我只使用内置的 Identity 并让它创建表。但现在在进行任何 API 调用之前。我假设我的 MVC 应用程序上的登录表单会调用 API,并且 API 会返回成功,然后我会设置一个 cookie 或其他东西对吗?
    • webapi 的身份验证是一个大话题 - 阅读 - asp.net/web-api/overview/security BTW 记得将此答案标记为正确 :)
    • 第二种方法虽然方便不重复自己,但会产生这样的效果,即直接调用意味着两个应用程序必须更新并一起工作,这在某种程度上违背了将其分离为自己的 WebApi 与拥有控制器的意义在您的网络应用程序中。如果它保持它自己的 WebApi 并使用客户端调用,您可以更新它并提供版本化的 Api 以允许调用者按照自己的时间表进行更新。这可能适用于您,也可能不适用于您,而且我过去曾采取过两种方式,但只是一些值得深思的思考。
    • @Runesun 这是一个很好的观点 - 但是我要指出的是,公开 Api 和向公众出售/提供访问权限会增加一个额外的复杂性和难度......这绝对不是一个简单的问题事情。
    • @LachlanB 绝对。与开发中的所有事物一样,任何方法的优缺点都需要根据问题的背景来考虑。
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多