简体   繁体   English

如何在 IHttpActionResult 的响应正文中添加“代码”返回 BadRequest(Message)

[英]How to add "code" in Response Body of IHttpActionResult return BadRequest(Message)

I am returning BadRequest("Failed Invalid Product Id"), which returns me Response code 400 and Response Body我返回 BadRequest("Failed Invalid Product Id"),它返回响应代码 400 和响应正文

{
    "error": {
    "code": "",
    "message": "Failed Invalid Product Id"
     }
}

How can I send the Response code 400 in the Response Body so I get Response Body Like:如何在响应正文中发送响应代码 400 以便我得到响应正文,例如:

{
    "error": {
    "code": 400,
    "message": "Failed Invalid Product Id"
     }
}

You can do something like this, with out testing it:你可以做这样的事情,而不用测试它:

return Content((HttpStatusCode)400, "Failed Invalid Product Id");

If you really want to have customized way to do it than you need to extend IHttpActionResult implementation with your own class like the following example which is inspired from this link :如果您真的想要定制的方式来做到这一点,那么您需要使用您自己的类来扩展IHttpActionResult实现,例如以下示例,其灵感来自此链接

public class ErrorResult : IHttpActionResult
{
    private readonly Error _error;
    private readonly HttpRequestMessage _request;

    public ErrorResult(Error error, HttpRequestMessage request)
    {
        _error = error;
        _request = request;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var err = new Error()
        {
            Code = _error.Code,
            Message = _error.Message
        };

        var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new ObjectContent<Error>(err, new JsonMediaTypeFormatter()),
            RequestMessage = _request
        };
        return Task.FromResult(response);
    }
}

public class Error
{
    public string Code { get; set; }
    public string Message { get; set; }
}

Then to use it:然后使用它:

var err = new Error()
{
    Code = "400",
    Message = "Failed Invalid Product Id"
};

return new ErrorResult(err, Request);

This will error return:这将错误返回:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM