Azure Functions - 返回类型 HttpResponseMessage 和 IActionResult 之间的区别
Posted
技术标签:
【中文标题】Azure Functions - 返回类型 HttpResponseMessage 和 IActionResult 之间的区别【英文标题】:Azure Functions - Difference between return type HttpResponseMessage and 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<HttpResponseMessage>
的Azure函数
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
HttpRequestMessage message,
【问题讨论】:
查看此链接,希望对您的请求有所帮助。 Why should I use IHttpActionResult instead of HttpResponseMessage? 【参考方案1】:如果我把
Task<IActionResult>
改成Task<HttpResponseMessage>
有什么不同吗?
您可以使用Task<HttpResponseMessage>
作为函数的返回类型。执行起来应该没有问题。
话虽如此,使用两者的区别在于您从函数返回响应的方式。
如果是IActionResult
类型的响应,则代码较少
在构建响应时编写并进行单元测试
更简单。
另一方面,HttpResponseMessage
对
通过网络发送的 Http 响应消息。
顺便说一句,
在HttpTrigger
Azure 函数v1.0
中,类型Task<HttpResponseMessage>
和HttpRequestMessage
分别用作返回类型和请求类型的默认值。
从v2.0
开始,Task<IActionResult>
和 HttpRequest
类型分别用作默认返回类型和请求类型,因为它符合 .net 核心 API 结构。
【讨论】:
【参考方案2】:使用IHttpActionResult
接口有两个主要优点。
-
代码更简洁易读
单元测试控制器操作方法要简单得多。我们将
讨论,对返回的方法进行单元测试是多么容易
在稍后的视频中使用 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
【讨论】:
以上是关于Azure Functions - 返回类型 HttpResponseMessage 和 IActionResult 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
发布函数时未返回 Azure Functions V2 Http 错误代码内容
如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?
我可以使用 Azure Functions 进行 SQL 查询并返回其结果吗? [关闭]