Каковы различия между этими классами в ASP.NET? Поскольку я обнаружил, что между этими классами нет отношения наследования.
Ниже код возвращает экземпляр HttpRequestWrapper
, который is a
HttpRequestBase
и has a
HttpRequest
HttpRequestMessage request = ...;
HttpRequestBase reqBase = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request;
// do somthing with reqBase.Cookies
Похоже, Microsoft захотела нас раздражать, пытаясь найти куки из HttpRequestMessage.
Гарантировано ли, что request.Properties["MS_HttpContext"]
никогда не будет null?
Или подумайте, что запрос ajax обрабатывается в действии ApiController. Я могу достичь IP-адреса клиента двумя разными способами.
var ip = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request.UserHostAddress
var ip = HttpContext.Current.Request.UserHostAddress
В чем разница между этими двумя?
Или, в общем, я могу получить доступ к таким же данным запроса/ответа, как Cookie, Header, Requestor Info и т.д. по-разному. Когда использовать какой? Можем ли мы сказать что-то вроде "если это запрос ajax, HttpRequest не гарантированно работает должным образом из-за отсутствия чего-либо для запросов ajax, мы должны вместо этого использовать HttpRequestMessage"?