Dev*_*ned 15 c# asp.net response asp.net-web-api asp.net-web-api2
如何使用IHttpActionResult?编写Created-201响应?
IHttpActionResult 只有这些选项
我现在正在做的是下面的代码,但我想使用IHttpActionResult而不是 HttpResponseMessage
public IHttpActionResult Post(TaskBase model)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, model);
response.Headers.Add("Id", model.Id.ToString());
return ResponseMessage(response);
}
Run Code Online (Sandbox Code Playgroud)
Gil*_*dor 15
如果您的视图派生自ApiController,您应该能够Created从基类调用该方法来创建这样的响应.
样品:
[Route("")]
public async Task<IHttpActionResult> PostView(Guid taskId, [FromBody]View view)
{
// ... Code here to save the view
return Created(new Uri(Url.Link(ViewRouteName, new { taskId = taskId, id = view.Id })), view);
}
Run Code Online (Sandbox Code Playgroud)
在 ASP.NET Core 中,IActionResult可以返回 。这意味着您可以返回ObjectResult带有 201 状态代码的 。
[HttpPost]
public async Task<IActionResult> PostAsync([FromBody] CreateModel createModel)
{
// Create domain entity and persist
var entity = await _service.Create(createModel);
// Return 201
return new ObjectResult(entity) { StatusCode = StatusCodes.Status201Created };
}
Run Code Online (Sandbox Code Playgroud)
或者,根据 Chris 的建议,您可以使用“ StatusCode ”方法返回 IActionResult,方法如下:
[HttpPost]
public async Task<IActionResult> PostAsync([FromBody] CreateModel createModel)
{
// Create domain entity and persist
var entity = await _service.Create(createModel);
// Return 201
return StatusCode(StatusCodes.Status201Created, entity);
}
Run Code Online (Sandbox Code Playgroud)
return Content(HttpStatusCode.Created, "Message");
Run Code Online (Sandbox Code Playgroud)
内容返回NegotiatedContentResult.NegotiatedContentResult实现了IHttpActionResult.
类似的问题:如果你想发送带有消息的NotFound.
return Content(HttpStatusCode.NotFound, "Message");
Run Code Online (Sandbox Code Playgroud)
要么:
return Content(HttpStatusCode.Created, Class object);
return Content(HttpStatusCode.NotFound, Class object);
Run Code Online (Sandbox Code Playgroud)