如何使用IHttpActionResult对Created-201响应进行编码

Dev*_*ned 15 c# asp.net response asp.net-web-api asp.net-web-api2

如何使用IHttpActionResult?编写Created-201响应?

IHttpActionResult 只有这些选项

  • 项目清单
  • 未找到
  • 例外
  • 擅自
  • 错误的请求
  • 冲突重定向
  • InvalidModelState

我现在正在做的是下面的代码,但我想使用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)

  • 或者,更好的是 CreatedAtRoute https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.createdatroute(v=vs.118).aspx (2认同)

chr*_*389 6

在 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)


Dav*_*nov 6

或者,根据 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)


mir*_*see 5

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)