我一直在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
参数的消息。
那么我现在有什么选择?
答案 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响应。例如Ok
,Created
或NotFound
。这些方法需要返回类型IActionResult
,因此您不能对方法的返回类型使用静态类型:
[HttpGet]
public IActionResult GetMessages()
{
var messages = GetMessagesFromService();
return Ok(messages);
}
答案 1 :(得分:1)
你的返回类型可以是IHttpActionResult,你可以从你的方法中返回Ok(消息)