【发布时间】:2011-08-01 12:45:10
【问题描述】:
您如何找到用于访问您的应用程序的 http 动词(POST、GET、DELETE、PUT)?我正在寻找httpcontext.current,但似乎没有任何属性可以为我提供信息。谢谢
【问题讨论】:
标签: c# asp.net http httpcontext httpverbs
您如何找到用于访问您的应用程序的 http 动词(POST、GET、DELETE、PUT)?我正在寻找httpcontext.current,但似乎没有任何属性可以为我提供信息。谢谢
【问题讨论】:
标签: c# asp.net http httpcontext httpverbs
使用HttpContext.Current.Request.HttpMethod。
见:http://msdn.microsoft.com/en-us/library/system.web.httprequest.httpmethod.aspx
【讨论】:
HttpContext.Current.Request.HttpMethod
【讨论】:
在 ASP.NET CORE 2.0 中,您可以使用以下方法获取(或设置)当前上下文的 HTTP 动词:
Request.HttpContext.Request.Method
【讨论】:
用于获取和发布
string method = HttpContext.Request.HttpMethod.ToUpper();
【讨论】:
您也可以使用:HttpContext.Current.Request.RequestType
https://msdn.microsoft.com/en-us/library/system.web.httprequest.requesttype(v=vs.110).aspx
【讨论】:
在 ASP.NET Core v3.1 中,我使用在构造函数中注入的 HttpContextAccessor 接口检索当前 HTTP 动词,例如
private readonly IHttpContextAccessor _httpContextAccessor;
public MyPage(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
用法:
_httpContextAccessor.HttpContext.Request.Method
【讨论】:
if (HttpContext.Request.HttpMethod == HttpMethod.Post.Method)
{
// The action is a post
}
if (HttpContext.Request.HttpMethod == HttpMethod.put.Method)
{
// The action is a put
}
if (HttpContext.Request.HttpMethod == HttpMethod.DELETE.Method)
{
// The action is a DELETE
}
if (HttpContext.Request.HttpMethod == HttpMethod.Get.Method)
{
// The action is a Get
}
【讨论】:
HttpContext.Current.Request.HttpMethod 返回字符串,但最好使用枚举HttpVerbs。似乎没有将当前动词作为枚举的内置方法,所以我为它写了助手
助手类
public static class HttpVerbsHelper
{
private static readonly Dictionary<HttpVerbs, string> Verbs =
new Dictionary<HttpVerbs, string>()
{
{HttpVerbs.Get, "GET"},
{HttpVerbs.Post, "POST"},
{HttpVerbs.Put, "PUT"},
{HttpVerbs.Delete, "DELETE"},
{HttpVerbs.Head, "HEAD"},
{HttpVerbs.Patch, "PATCH"},
{HttpVerbs.Options, "OPTIONS"}
};
public static HttpVerbs? GetVerb(string value)
{
var verb = (
from x in Verbs
where string.Compare(value, x.Value, StringComparison.OrdinalIgnoreCase) == 0
select x.Key);
return verb.SingleOrDefault();
}
}
应用程序的基本控制器类
public abstract class BaseAppController : Controller
{
protected HttpVerbs? HttpVerb
{
get
{
var httpMethodOverride = ControllerContext.HttpContext.Request.GetHttpMethodOverride();
return HttpVerbsHelper.GetVerb(httpMethodOverride);
}
}
}
【讨论】: