c# forbidden.html,c# – 如何使用Forbidden状态web api返回ModelState

您可以使用InvalidModelStateResult的ExecuteAsync方法(ApiController的BadRequest()方法的返回类型)来实现所需的输出,该方法实际上序列化了ModelState.

因此,我们的想法是创建一个新类,该类扩展InvalidModelStateResult并覆盖ExecuteAsync方法以更改状态代码.

public class ModelStateResult : InvalidModelStateResult

{

private readonly HttpStatusCode _status;

public ModelStateResult(ModelStateDictionary modelState, ApiController controller, HttpStatusCode status) : base(modelState, controller)

{

_status = status;

}

public override Task ExecuteAsync(CancellationToken cancellationToken)

{

var response = base.ExecuteAsync(cancellationToken).Result;

response.StatusCode = _status;

return Task.FromResult(response);

}

}

使用它像:

return new ModelStateResult(ModelState, this, HttpStatusCode.Forbidden); //this refers to ApiController here

我认为这只是一个解决方法,希望有人发布更好的方法来实现它.

编辑:

不使用InvalidModelStateResult:

public class ModelStateResult : IHttpActionResult

{

public HttpStatusCode Status { get; }

public ModelStateDictionary ModelState { get; }

public HttpRequestMessage Request { get; }

public ModelStateResult(HttpStatusCode status, ModelStateDictionary modelState, HttpRequestMessage request)

{

Status = status;

ModelState = modelState;

Request = request;

}

public Task ExecuteAsync(CancellationToken cancellationToken)

{

var response = Request.CreateErrorResponse(Status, ModelState);

return Task.FromResult(response);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值