2017-03-18 62 views
0

當你從asp.net核心控制器返回一個響應時,你可以用兩種方式返回數據(可能還有更多,但我只關注這兩個方面)。我的問題是兩種方法(如果有的話)之間的區別是什麼;返回值直接寫入身體?Body.Write和返回字符串有什麼不同嗎?

[HttpGet("Fetch_Write")] 
    public void Fetch_Write() 
    { 
     HttpContext.Response.ContentType = "application/json"; 
     var s = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new { data = "my_fetched_data" })); 
     HttpContext.Response.Body.Write(s, 0, s.Length); 
    } 

在上面的函數的返回類型的方法是無效的,我直接寫內容到響應的身體,但我下面的函數的版本返回一個字符串。使用郵遞員時,我從兩個API調用中獲得相同的響應,這兩者之間是否有區別?我應該使用一個嗎?

[HttpGet("Fetch_Return")] 
    public string Fetch_Return() 
    { 
     HttpContext.Response.ContentType = "application/json"; 
     return JsonConvert.SerializeObject(new { data = "my_fetched_data" }); 
    } 

我的猜測是是返回一個字符串的函數執行後下樓它作爲我的第一個代碼段的功能都做,但我不知道的內容寫入主體的行類似的東西。

回答

2

沒有太大的區別。但是在實踐中,你應該避免這兩者,因爲它是鍋爐板,並沒有充分利用ASP.NET Core MVC工具。

這是最好使用IActionResult不是作爲返回類型和使用任何輔助方法(OkBadRequestNotFoundFile等),或者直接創建OkObjectResult/OkResult類和歸還。這使您可以設置狀態代碼,並讓ASP.NET Core根據調用者接受的標題選擇正確的格式化程序(XML或json,稍後甚至可能包括OData,protobuf甚至自定義格式化程序)。

例如:

[HttpGet("Fetch_Return")] 
[Produces("application/json"),Produces("application/xml")] 
public string Fetch_Return() 
{ 
    return Ok(new { data = "my_fetched_data" }); 
} 

[Produces("application/json"),Produces("application/xml")]將只允許XML和JSON格式。因此,如果用戶使用Accept: application/xml調用此操作,他將收到一個xml文件,如果他用Accept: application/json調用。如果您請求application/text,瀏覽器將返回HTTP代碼415「不支持的媒體類型」。

相關問題