我已经在我的邮件中发送了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
那么我现在有什么选择呢?
HttpResponseMessage是来自经典 ASP.NET WebAPI 的遗留响应对象。它\xe2\x80\x99s 不在 ASP.NET Core 内部使用,在控制器中使用它只会导致兼容层运行,将旧响应类型转换为 ASP.NET Core 使用的类型。因此,在编写新代码时不应该使用它。
相反,在 ASP.NET Core 中,您返回一个IActionResult为 API 方法返回一个或 API 端点返回的实际对象。
状态代码200 OK是请求的默认状态代码,因此您实际上不需要显式返回带有该状态代码的响应。在 API 控制器操作中,您可以只返回实际对象:
[HttpGet]\npublic List<string> GetMessages()\n{\n var messages = GetMessagesFromService();\n\n return messages;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nASP.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}\nRun Code Online (Sandbox Code Playgroud)\n\n还有许多帮助器方法ControllerBase允许您返回显式 HTTP 响应。例如Ok,Created, 或NotFound。但这些方法需要返回类型IActionResult,因此您不能将静态类型与 method\xe2\x80\x99s 返回类型一起使用:
[HttpGet]\npublic IActionResult GetMessages()\n{\n var messages = GetMessagesFromService();\n\n return Ok(messages);\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7107 次 |
| 最近记录: |