我是asp.net mvc和web的新手。我正在读一本书,上面写着:
ASP.NET MVC使用:System.Web.HttpRequest
与Web等价的是System.Net.Http.HttpRequestMessage
下面是描述web的请求和结果流的图片。

因此,我的问题是,宿主环境(通常是IIS)如何知道它应该创建一个HttpRequestMessage对象来表示来自客户端的请求?我的意思是,如果应用程序是MVC应用程序,IIS应该创建一个HttpRequest对象而不是HttpRequestMessage,那么IIS如何知道要创建哪个对象呢?
发布于 2019-10-23 23:07:14
您可以从发布的图片中看到,HttpRequestMessage只存在于“宿主”环境中,web浏览器客户端对此一无所知。
在“托管”世界中,IIS应用程序池正在运行您构建和部署的代码,这些代码非常了解您正在使用的框架,因为您的代码还包含您列出的使用程序集System.Web.或者System.Net..。
考虑一下,即使您已经显示了宿主、Controller和Action之间的分离,所有这些都运行在IIS中的同一个App中,后者再次运行您的代码,因此知道您的IL程序集是从您的特定源代码构建的。
发布于 2019-10-23 23:39:41
我不确定我是否理解你的问题,但这可能是你想要的:
--我的意思是,如果应用程序是MVC应用程序,IIS应该创建一个HttpRequest对象而不是HttpRequestMessage,那么IIS如何知道创建哪个对象呢?
您必须记住如何区分正常的MVC控制器和Web API控制器.
WebAPI控制器强制执行这个注释[ApiController],并且必须从ControllerBase继承
[ApiController] public class PeopleController : ControllerBase { //Your API methods here }
普通的MVC控制器只继承Controller基类:
public class PeopleController : Controller { //Your Action methods here... }
这些已经为您的应用程序创建配置,这将使您的托管环境更容易知道什么是正在进行和什么时候返回。
我希望你觉得这有帮助。
https://stackoverflow.com/questions/58531668
复制相似问题