Request.CreateResponse<List<string>>(HttpStatusCode.OK, messages) 的替代方案

sim*_*ada 3 .net asp.net-core

我已经在我的邮件中发送了api controller如下回复(.Net Framework 4.5)

 public virtual async Task<HttpResponseMessage> Import(Guid Id)
 { 
    ////
    return Request.CreateResponse<List<string>>(HttpStatusCode.OK, messages);
 }
Run Code Online (Sandbox Code Playgroud)

.NET Core 2.0 中上述方案的替代方案是什么?

我找到了一种新方法HttpResponseMessage(HttpStatusCode.Ok),但没有接受/接受消息参数的 constructor 方法。HttpResponseMessageadditional

那么我现在有什么选择呢?

pok*_*oke 5

HttpResponseMessage是来自经典 ASP.NET WebAPI 的遗留响应对象。它\xe2\x80\x99s 不在 ASP.NET Core 内部使用,在控制器中使用它只会导致兼容层运行,将旧响应类型转换为 ASP.NET Core 使用的类型。因此,在编写新代码时不应该使用它。

\n\n

相反,在 ASP.NET Core 中,您返回一个IActionResult为 API 方法返回一个或 API 端点返回的实际对象。

\n\n

状态代码200 OK是请求的默认状态代码,因此您实际上不需要显式返回带有该状态代码的响应。在 API 控制器操作中,您可以只返回实际对象:

\n\n
[HttpGet]\npublic List<string> GetMessages()\n{\n    var messages = GetMessagesFromService();\n\n    return messages;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

ASP.NET Core 会自动将其转换为正确的响应,并将结果转换为 JSON(默认情况下)并将其放入正文中。因此,您不需要\xe2\x80\x99t 在那里创建响应。

\n\n

如果您发现自己需要更改状态代码,您仍然可以执行相同的操作,但只需之前设置response\xe2\x80\x99s 状态代码:

\n\n
[HttpPost]\npublic string CreateMessage(string message)\n{\n    var message = CreateMessageInService(message);\n\n    // set status code\n    Response.StatusCode = 201; // 201 Created\n\n    return message;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

还有许多帮助器方法ControllerBase允许您返回显式 HTTP 响应。例如OkCreated, 或NotFound。但这些方法需要返回类型IActionResult,因此您不能将静态类型与 method\xe2\x80\x99s 返回类型一起使用:

\n\n
[HttpGet]\npublic IActionResult GetMessages()\n{\n    var messages = GetMessagesFromService();\n\n    return Ok(messages);\n}\n
Run Code Online (Sandbox Code Playgroud)\n