Request.CreateResponse的替代方法<list <string>&gt;(HttpStatusCode.OK,messages)

时间:2017-08-17 06:55:28

标签: .net asp.net-core

我一直在config/elasticsearch.yml发送回复api controller

(.Net Framework 4.5)
  

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

我找到了一种新的 public virtual async Task<HttpResponseMessage> Import(Guid Id) { //// return Request.CreateResponse<List<string>>(HttpStatusCode.OK, messages); } 方法,但HttpResponseMessage(HttpStatusCode.Ok)没有constructor接受/ HttpResponseMessage参数的消息。

那么我现在有什么选择?

2 个答案:

答案 0 :(得分:3)

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

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

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

[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响应。例如OkCreatedNotFound。这些方法需要返回类型IActionResult,因此您不能对方法的返回类型使用静态类型:

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

    return Ok(messages);
}

答案 1 :(得分:1)

你的返回类型可以是IHttpActionResult,你可以从你的方法中返回Ok(消息)