[ASP.NET] WebAPI Return Request Result

  • 8260
  • 0

[ASP.NET] WebAPI Return Request Result

本篇簡單來談一下關於WebAPI的請求結果回傳,舉例來說我們設計了一個WebAPI利用POST來進行資料的新增,先撇開WebAPI,我們可能在ASP.NET(WebForm)會直接在Button事件進行資料新增的動作,完成後給使用者一個訊息,讓使用者可以知道資料已新增完畢,程式碼可能是這樣的

protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        // do insert
        //....
        //.....

        //for demo (直接用個Response.Write)
        Response.Write("新增成功");
    }
    catch (Exception)
    {
        
        throw;
    }
}

 

而如今以WebAPI來進行這樣的需求,我們同樣也希望一個請求發出後,能得到回應以決定接下來要做什麼事情,因此最簡單的想法可能也就是且同樣直接傳回一個字串,程式碼可能是這樣的

public class EmpController : ApiController
{
    [HttpPost]
    public string EmpInert(EmpInfo empinfo)
    {
        //do insrt db 

        //.......

       //直接回傳一個字串

        return "Insert Success";
    }
}

 

以POSTMAN進行測試,理所當然就能拿到這個字串,然後也許接下來就會看到 if(result == "Insert Success" ) ,這樣的判斷式。但我們可以想像一下在程式碼中到處出現這樣的Magic Word並不是件好事,當然也許您會說......可以判斷回應值是不是200啊( 預設情況下通常是200 )....... 但是任何的請求如果都回傳200,實務上也許並不是那麼合適。

image

 

因此接下來我想說的是,即然WebAPI的本質上是一個httprequest,那麼想當然爾應該使用標準Http Status Code來得知請求狀態,至於回應內容則應該放在Response Content中,同樣的例子我們可以改寫成這個樣子,以HttpResponseMessage來進行回傳,並透過 Set Status Code 來決定我們要傳回的請求狀態。

[HttpPost]
public HttpResponseMessage EmpInert(EmpInfo empinfo)
{
    //do insrt db 
    //.....

    return Request.CreateResponse(HttpStatusCode.Created, empinfo);
}

 

例子中我們設定回傳的Status Code為201,Content則為原始請求的empinfo,傳回後是一個 json格式字串。

image

 

因此呼叫端可以針對特定的Status Code來進行邏輯上的判斷式,而Status Code當然也不是隨便定義的,這部份完全是尊照RFC 2616 中所定義的狀態碼值,關於狀態碼值可以參考(http://msdn.microsoft.com/zh-tw/library/system.net.httpstatuscode.aspx),選擇合適的狀態碼值。

SNAGHTMLc132837

 

 

Ref :

HttpStatusCode 列舉型別

HttpResponseMessage 類別

 

若本文對您有所幫助,歡迎轉貼,但請在加註【轉貼】及來源出處,並在附上本篇的超連結,感恩您的配合囉。

By No.18