繁体   English   中英

如何在同一项目中的ASP.NET MVC控制器中从ASP.NET Web API获取数据

[英]How get data from asp.net web api in asp.net mvc controller in the same project

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

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

我的问题是:

  1. 还有什么可能的解决方案来解决我的任务(在.Net平台中)?
  2. 在ASP.NET MVC控制器中对同一主机(localhost)的HTTP请求如何影响客户端浏览器(公共部分)的延迟时间,这对于响应时间至关重要?
  3. 最佳解决方案1或2是什么?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM