gpt4 book ai didi

.net - Request.CreateResponse>(HttpStatusCode.OK, messages) 的替代方案

转载 作者:行者123 更新时间:2023-12-02 08:12:06 25 4
gpt4 key购买 nike

我一直在我的 api Controller 中发送响应,如下 (.Net Framework 4.5)

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

What is the alternative for above in .NET Core 2.0?

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

那么我现在有什么选择?

最佳答案

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

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

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

[HttpGet]
public List<string> GetMessages()
{
var messages = GetMessagesFromService();

return messages;
}

ASP.NET Core 会自动将其转换为适当的响应并将结果转换为 JSON(默认情况下)并将其放入主体中。因此,您无需在此处创建回复。

如果您发现自己处于需要更改状态码的情况,您仍然可以这样做,但只需在之前设置响应的状态码即可:

[HttpPost]
public string CreateMessage(string message)
{
var message = CreateMessageInService(message);

// set status code
Response.StatusCode = 201; // 201 Created

return message;
}

ControllerBase 中还有一些辅助方法,可让您返回明确的 HTTP 响应。例如Ok , Created , 或 NotFound .但是,这些方法需要 IActionResult 的返回类型,因此您不能对方法的返回类型使用静态类型:

[HttpGet]
public IActionResult GetMessages()
{
var messages = GetMessagesFromService();

return Ok(messages);
}

关于.net - Request.CreateResponse<List<string>>(HttpStatusCode.OK, messages) 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45728424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com