【问题标题】:Http verb of current http context当前http上下文的http动词
【发布时间】:2011-08-01 12:45:10
【问题描述】:

您如何找到用于访问您的应用程序的 http 动词(POST、GET、DELETE、PUT)?我正在寻找httpcontext.current,但似乎没有任何属性可以为我提供信息。谢谢

【问题讨论】:

    标签: c# asp.net http httpcontext httpverbs


    【解决方案1】:

    使用HttpContext.Current.Request.HttpMethod

    见:http://msdn.microsoft.com/en-us/library/system.web.httprequest.httpmethod.aspx

    【讨论】:

      【解决方案2】:
      HttpContext.Current.Request.HttpMethod
      

      【讨论】:

        【解决方案3】:

        在 ASP.NET CORE 2.0 中,您可以使用以下方法获取(或设置)当前上下文的 HTTP 动词:

        Request.HttpContext.Request.Method
        

        【讨论】:

          【解决方案4】:

          用于获取和发布

          string method = HttpContext.Request.HttpMethod.ToUpper();
          

          【讨论】:

            【解决方案5】:

            您也可以使用:HttpContext.Current.Request.RequestType

            https://msdn.microsoft.com/en-us/library/system.web.httprequest.requesttype(v=vs.110).aspx

            【讨论】:

              【解决方案6】:

              在 ASP.NET Core v3.1 中,我使用在构造函数中注入的 HttpContextAccessor 接口检索当前 HTTP 动词,例如

              private readonly IHttpContextAccessor _httpContextAccessor;
              
              public MyPage(IHttpContextAccessor httpContextAccessor)
              {
                  _httpContextAccessor = httpContextAccessor;
              }
              

              用法:

              _httpContextAccessor.HttpContext.Request.Method
              

              【讨论】:

                【解决方案7】:
                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
                }
                

                【讨论】:

                  【解决方案8】:

                  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);
                              }
                          }
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-08-09
                    • 2012-06-26
                    • 1970-01-01
                    • 2010-12-12
                    • 2018-05-09
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多