簡體   English   中英

Azure 函數 - 返回類型 HttpResponseMessage 和 IActionResult 之間的區別

[英]Azure Functions - Difference between return type HttpResponseMessage and IActionResult

我創建了 Http 觸發器 Azure Function ,其默認返回類型是Task<IActionResult>

如果我將其更改為Task<HttpResponseMessage>有什么區別嗎?

Azure function 與Task<IActionResult>返回類型:

 public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,

Azure function 與Task<HttpResponseMessage>

 public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
            HttpRequestMessage message,

如果我將Task<IActionResult>更改為Task<HttpResponseMessage>有什么區別嗎?

您可以使用Task<HttpResponseMessage>作為 function 的返回類型。 執行它應該沒有問題。

話雖如此,使用兩者的區別在於您從 function 返回響應的方式。

  • IActionResult類型的響應的情況下,構建響應時要編寫的代碼更少,它使單元測試更簡單。
  • 另一方面, HttpResponseMessage對通過網絡發送的 Http 響應消息提供了更多控制。

就像旁注一樣,

HttpTrigger Azure function v1.0中,類型Task<HttpResponseMessage>HttpRequestMessage分別用作返回類型和請求類型的默認值。

v2.0開始, Task<IActionResult>HttpRequest類型分別用作默認返回類型和請求類型,因為它符合 .net 核心 API 結構。

使用IHttpActionResult接口有兩個主要優點。

  1. 代碼更干凈,更容易閱讀
  2. 單元測試 controller 操作方法要簡單得多。 我們將在后面的視頻中討論,對返回 IHttpActionResult 而不是 HttpResponseMessage 的方法進行單元測試是多么容易。

你可以在這里看到。

static List<Student> students = new List<Student>()
{
    new Student() { Id = 1, Name = "Tom" },
    new Student() { Id = 2, Name = "Sam" },
    new Student() { Id = 3, Name = "John" }
};

public IHttpActionResult Get()
{
    return Ok(students);
}


public HttpResponseMessage Get(int id)
{
    var student = students.FirstOrDefault(s => s.Id == id);
    if (student == null)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound,
            "Student not found");
    }

    return Request.CreateResponse(student);
}

所有這些方法都返回一個實現IHttpActionResult接口的類型。

BadRequest()
Conflict()
Created()
InternalServerError()
Redirect()
Unauthorized()

我參考了這個鏈接https://csharp-video-tutorials.blogspot.com/2017/02/ihttpactionresult-vs-httpresponsemessage.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM