ASP.NET求得目前HTTP來源要求方法(GET、POST...)

原本寫API都是單一用途,大家彼此律定好就成立。今天遇到一個需求是既要能用GET又要能支援POST,礙於在WebForm架構內GET與POST求取System.Collections.Specialized.NameValueCollection的方法途徑並沒有一致,因此需要視情況切換兩種指令來進行擷取。

判斷客戶端是用哪個方式送出Http Request?

答案很簡單,.NET有提供對應方法回傳字串(public string HttpMethod { get; }):

.aspx寫法:

System.Web.HttpContext.Current.Request.HttpMethod

.ashx寫法:

System.Web.HttpContext.Request.HttpMethod

實作上建議還是先轉大寫會比較好,這裡.NET沒有提供enum回傳我個人覺得考慮欠佳:

switch (oContext.Request.HttpMethod.ToUpper())
{ //進行GET方法處理
  case "GET":
    if (!string.IsNullOrEmpty(oContext.Request.QueryString["xxx"]))
    { cTemp = oContext.Request.QueryString["xxx"] as string; }
    ...
    break;
  //進行POST方法處理
  case "POST":
    if (!string.IsNullOrEmpty(oContext.Request.Form["xxx"]))
    { cTemp = oContext.Request.Form["xxx"] as string; }
    ...
    break;
}

備註:現代POST送過來的資料極有可能是JSON資料格式,所以建議在CASE POST裡面,加上驗證「oContext.Request.ContentType」是否為「application/json」,若為是再進行後續的處理尤佳。

ASP.NET C# CSharp HTTP HTTPS Request Verbs Methods 動詞