gpt4 book ai didi

c# - HttpRequest 与 HttpRequestMessage 与 HttpRequestBase

转载 作者:IT王子 更新时间:2023-10-29 03:51:18 30 4
gpt4 key购买 nike

ASP.NET 中的这些类有什么区别?我发现这些类之间没有继承关系。

下面的代码返回一个 HttpRequestWrapper 的实例,它是一个 HttpRequestBase 并且有一个 HttpRequest

HttpRequestMessage request = ...;
HttpRequestBase reqBase = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request;
// do somthing with reqBase.Cookies

微软似乎想在从 HttpRequestMessage 获取 cookie 时惹恼我们。

是否保证 request.Properties["MS_HttpContext"] 永远不会为空?

或者认为ajax 请求是在ApiController 的一个 Action 中处理的。我可以通过两种不同的方式访问客户端的 IP。

var ip = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request.UserHostAddress

var ip = HttpContext.Current.Request.UserHostAddress

这两者有什么区别?

或者一般来说,我可以通过不同的方式访问相同的请求/响应数据,例如 Cookie、 header 、请求者信息等。什么时候使用哪个?我们可以说“如果它是一个 ajax 请求,HttpRequest 不能保证正常工作,因为缺少某些东西,所以对于 ajax 请求,我们应该改用 HttpRequestMessage”?

最佳答案

HttpRequest出现在 Page 上和 UserControl类作为 GET-only 属性。同样,它自己的大部分属性也是 GET-only(参见 1)。 ASP.NET 页面使用此类来获取有关传入的 http 请求的信息,例如读取客户端 IP、cookie、查询字符串等等。重要的是,它是自 .NET 1.1 以来就存在的“旧”System.Web 程序集的一部分

HttpRequestMessage ,另一方面,是 .NET 4.5 中的新增功能。它是 System.Net 的一部分.客户端和服务都可以使用它通过 HTTP 创建、发送和接收请求和响应。它取代了 HttpWebRequest ,在 .NET 4.5 中已过时

在 HttpRequestBase 和 HttpRequestWrapper 上,我能做的最好的就是引用 docs

The HttpRequestWrapper class derives from the HttpRequestBase class and serves as a wrapper for the HttpRequest class. This class exposes the functionality of the HttpRequest class and exposes the HttpRequestBase type. The HttpRequestBase class enables you to replace the original implementation of the HttpRequest class in your application with a custom implementation, such as when you perform unit testing outside the ASP.NET pipeline.

关于c# - HttpRequest 与 HttpRequestMessage 与 HttpRequestBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718468/

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