繁体   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