gpt4 book ai didi

c# - Web API 中的模型验证 - 在没有 throw 语句的情况下抛出异常?

转载 作者:太空狗 更新时间:2023-10-30 00:31:38 25 4
gpt4 key购买 nike

我已经看到来自 here模型验证 (在以下部分:处理验证错误)。

代码片段如下Web API

public class ValidateModel : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}

base.OnActionExecuting(actionContext);
}
}

问题是在验证模型时,如果有任何错误,它会分配一个模型状态无效异常。

然后,在转到实际方法(使用此 [ValidateModel] 属性装饰)之前,WebAPI 简单地返回一个 400 请求。

但是怎么办?哪个函数返回 HTTP 400

这个方法执行完之后会发生什么?控制流向何处?

编辑:

我将此属性应用到的操作是正常操作。

[ValidateModel]
public IHttpActionResult Post([FromBody]Request)
{
//do normal business logics here.
return Ok(SuccessMessage);
}

最佳答案

要了解您首先需要访问此链接的控制流 -

Action Attribute Class Reference

检查那里的方法部分。如果明确指出,OnActionExecuting 在用此属性修饰的特定操作执行之前执行,而 OnActionExecuted 在执行完成后执行。因为你正在像这样实现 OnActionExecuting -

public class ValidateModel : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}

base.OnActionExecuting(actionContext);
}
}

因为错误是在这个方法中抛出的,就像这样 -

 if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}

只有当 OnActionExecuting 方法找到有效模型时,您的方法才会执行。从错误 400 来看,您当前的模型状态似乎无效,因此它无法成功,除非您提供有效的模型,否则您的方法将永远不会执行。在此方法中设置一个调试点,您可以找出它失败的原因。

顺便说一下,异常不会被抛出,它只是一个由 - 处理的标准响应

base.OnActionExecuting(actionContext);

http://msdn.microsoft.com/en-us/library/system.web.mvc.actionfilterattribute(v=vs.118).aspx

关于c# - Web API 中的模型验证 - 在没有 throw 语句的情况下抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com