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"]
是否一定不会是 null?
或者假设一个 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”?