所述的HttpRequest类定义了两个属性:
获取客户端使用的HTTP数据传输方法(如GET,POST或HEAD).
Run Code Online (Sandbox Code Playgroud)public string HttpMethod { get; }客户端使用的HTTP数据传输方法.
获取或设置客户端使用的HTTP数据传输方法(GET或POST).
Run Code Online (Sandbox Code Playgroud)public string RequestType { get; set; }表示客户端发送的HTTP调用类型的字符串.
这两个属性有什么区别?我什么时候想要使用另一个?哪个是检查以查看客户端使用的数据传输方法的正确方法?
文档表明HttpMethod将返回使用的动词:
例如GET,POST或HEAD
而RequestType上的文档似乎只表示两个可能值中的一个:
GET或POST
我使用动词的随机抽样进行测试,这两个属性似乎都支持所有动词,并且都返回相同的值:
测试:
Client Used HttpMethod RequestType
GET GET GET
POST POST POST
HEAD HEAD HEAD
CONNECT CONNECT CONNECT
MKCOL MKCOL MKCOL
PUT PUT PUT
FOOTEST FOOTEST FOOTEST
Run Code Online (Sandbox Code Playgroud)
有什么区别:
什么时候应该使用另一个?
我正在为一个以HttpContext作为参数的方法编写一些单元测试.我想在请求是POST时测试行为是否符合预期.
在创建System.Net.HttpWebRequest时,很容易设置方法,但在创建System.Web.HttpRequest时,我无法看到指定方法的方法,这是HttpContext中使用的方法.
有任何想法吗?
对于上下文,该方法由httphandler调用,如果请求不是POST,则应该抛出405.我知道我可以使用web.config中的Verbs属性过滤允许的方法,但是我会在未来阻止某人改变动词属性以允许其他方法,在这种情况下我希望处理程序要小心它本身.
目前使用的助手方法:
private HttpContext GetHttpContext(string requestUrl)
{
var httpRequest = new HttpRequest("", requestUrl, "");
var stringWriter = new StringWriter();
var httpResponce = new HttpResponse(stringWriter);
return new HttpContext(httpRequest, httpResponce);
}
Run Code Online (Sandbox Code Playgroud)