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」,若為是再進行後續的處理尤佳。