【问题标题】:Azure Functions - Difference between return type HttpResponseMessage and IActionResultAzure Functions - 返回类型 HttpResponseMessage 和 IActionResult 之间的区别
【发布时间】:2020-09-26 05:33:54
【问题描述】:

我创建了 Http Trigger Azure Function,它的默认返回类型是Task<IActionResult>

如果我改成Task<HttpResponseMessage>有什么不同吗?

带有Task<IActionResult>返回类型的Azure函数:

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

带有Task&lt;HttpResponseMessage&gt;的Azure函数

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

【问题讨论】:

标签: c# azure azure-functions


【解决方案1】:

如果我把Task&lt;IActionResult&gt;改成Task&lt;HttpResponseMessage&gt;有什么不同吗?

您可以使用Task&lt;HttpResponseMessage&gt; 作为函数的返回类型。执行起来应该没有问题。

话虽如此,使用两者的区别在于您从函数返回响应的方式。

  • 如果是IActionResult 类型的响应,则代码较少 在构建响应时编写并进行单元测试 更简单。
  • 另一方面,HttpResponseMessage 对 通过网络发送的 Http 响应消息。

顺便说一句,

HttpTrigger Azure 函数v1.0 中,类型Task&lt;HttpResponseMessage&gt;HttpRequestMessage 分别用作返回类型和请求类型的默认值。

v2.0 开始,Task&lt;IActionResult&gt;HttpRequest 类型分别用作默认返回类型和请求类型,因为它符合 .net 核心 API 结构。

【讨论】:

    【解决方案2】:

    使用IHttpActionResult 接口有两个主要优点。

    1. 代码更简洁易读
    2. 单元测试控制器操作方法要简单得多。我们将 讨论,对返回的方法进行单元测试是多么容易 在稍后的视频中使用 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

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2013-10-05
      • 2016-09-28
      • 2013-11-17
      • 1970-01-01
      相关资源
      最近更新 更多