gpt4 book ai didi

c# - 如何从同一项目中的asp.net mvc Controller 中的asp.net web api获取数据

转载 作者:行者123 更新时间:2023-11-30 22:09:46 25 4
gpt4 key购买 nike

我需要编写网站,该网站必须在单页应用程序中具有私有(private)部分,而公共(public)部分必须采用经典样式(以通过搜索引擎进行最佳索引)并支持 Ajax,而无需使用 CORS 或 JSONP。所有逻辑都必须采用服务 (RESTful) 风格,以支持 future 的移动应用程序。所以我决定在一个项目中使用 ASP.NET MVC 和 ASP.NET Web API(以防止 CORS 或 JSONP),我计划使用 asp.net mvc Controller 为私有(private)部分返回模板 html,为公共(public)部分返回整个 html。除了为公共(public)部分 View 获取一些数据(字典集合)外,我不想将任何逻辑添加到 asp.net mvc Controller 中。因此,请参阅两个可能的解决方案。

  1. 创建 ApiController 并尝试从它的方法中获取数据
    • 不喜欢那样,因为它破坏了 RESTful 风格和 SoC(它需要将 IUnityOfWofk 实现传递给 DI 下的 asp.net mvc Controller 构造函数,以将其重定向到 ApiController 的构造函数)
    • 喜欢那样,因为它不需要花时间来 http 请求同一主机(本地主机)。
  2. 根据 http 请求向 MVC Controller 中的 ApiController 获取数据。
    • 喜欢那样,因为 RESTful 和 SoC 没问题。
    • 不喜欢这样,因为它会花时间向同一主机 (localhost) 发送 http 请求。

我的问题是:

  1. 还有什么可能的解决方案可以解决我的任务(在 .Net 平台上)?
  2. 在 asp.net mvc Controller 中对同一主机(本地主机)的 http 请求如何影响客户端浏览器(公共(public)部分)的时间延迟,这对响应时间至关重要?
  3. 最佳解决方案 1 或 2 是什么?

最佳答案

另一种选择是将您的逻辑从 Web API Controller 分解为一个单独的类模型,并在 MVC 和 Web API Controller 中都使用它,例如通过将相关逻辑类的实例注入(inject) Controller 。您还可以共享工作单元。

当然,这会增加另一层复杂性,但同时会带来更好的关注点分离。毕竟,MVC 和 Web API 只是将您的逻辑呈现给特定客户端的一种方式。对于 Web API,Web API 层的主要职责是为您的逻辑创建一个 RESTful 接口(interface);如果您非常严格,处理逻辑本身并不是 Web API 层的任务。

与其他方法相比,我更喜欢这种方法,因为这些方法有一些缺点(您问题中的数字):

  1. 创建ApiController:您需要很好地模拟Web API 环境。尽管这是可能的,但这也意味着 Web API 方面的更改将对您的逻辑的实现产生影响。
  2. 向 Web API 发出 HTTP 请求:
    • 虽然向 MVC Controller 中的同一服务器发出请求可能相对较快,因此并不重要,但如果您可以只调用一些共享类,则需要一些时间,这不是必需的。
    • 另外,HTTP 请求增加了一个点,您的系统可能会崩溃。
    • 此外,您将无法与 Web API 共享工作单元。

关于c# - 如何从同一项目中的asp.net mvc Controller 中的asp.net web api获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21350579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com