WebAPI 2 ValidateModelAttribute 未触发
WebAPI 2 ValidateModelAttribute not firing
我有一个自定义 ValidateModelAttribute
但由于某种原因它没有触发
using System.Net;
using System.Web.Http.Controllers;
using System.Net.Http;
using System.Web.Http.Filters;
namespace blank.Utilities.CustomAttributes
{
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
}
这里是 Post 调用
[ValidateModelAttribute]
[HttpPost]
[Route("update")]
public IHttpActionResult Post(ActivityPctCompleteDto actDto) {
_activityService.UpdatePctComplete(actDto);
return Ok();
}
我在 post 中添加了 fromBody
和 fromUri
,但它不起作用。我在这里错过了什么?
这是我的 Dto
public class ActivityPctCompleteDto
{
[Required(ErrorMessage = "ActivityID is an invalid Guid value.")]
public Guid? Id { get; set; }
[Required(ErrorMessage = "PctComplete is an invalid Decimal(5,4) value.")]
public decimal? PctComplete { get; set; }
}
我试过你的代码,动作过滤器对我来说效果很好。要诊断您的问题,请检查以下内容:
- 您正在使用
System.Web.Http.Filters
命名空间中的 ActionFilterAttribute
吗?与来自 System.Web.Mvc
. 的过滤器存在常见的混淆
- 您请求的 HTTP 结果是什么?可能它在 ASP.NET 管道的某些早期阶段失败了,比如路由或身份验证?
- 您确定正是这个
Post()
方法处理了请求吗?尝试设置断点并检查它是否命中。
我有一个自定义 ValidateModelAttribute
但由于某种原因它没有触发
using System.Net;
using System.Web.Http.Controllers;
using System.Net.Http;
using System.Web.Http.Filters;
namespace blank.Utilities.CustomAttributes
{
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
}
这里是 Post 调用
[ValidateModelAttribute]
[HttpPost]
[Route("update")]
public IHttpActionResult Post(ActivityPctCompleteDto actDto) {
_activityService.UpdatePctComplete(actDto);
return Ok();
}
我在 post 中添加了 fromBody
和 fromUri
,但它不起作用。我在这里错过了什么?
这是我的 Dto
public class ActivityPctCompleteDto
{
[Required(ErrorMessage = "ActivityID is an invalid Guid value.")]
public Guid? Id { get; set; }
[Required(ErrorMessage = "PctComplete is an invalid Decimal(5,4) value.")]
public decimal? PctComplete { get; set; }
}
我试过你的代码,动作过滤器对我来说效果很好。要诊断您的问题,请检查以下内容:
- 您正在使用
System.Web.Http.Filters
命名空间中的ActionFilterAttribute
吗?与来自System.Web.Mvc
. 的过滤器存在常见的混淆
- 您请求的 HTTP 结果是什么?可能它在 ASP.NET 管道的某些早期阶段失败了,比如路由或身份验证?
- 您确定正是这个
Post()
方法处理了请求吗?尝试设置断点并检查它是否命中。