WebAPI 2 ValidateModelAttribute未触发

时间:2017-11-30 23:41:15

标签: c# asp.net-web-api2 custom-action-filter

我有一个自定义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 post

[ValidateModelAttribute]
[HttpPost]
[Route("update")]
public IHttpActionResult Post(ActivityPctCompleteDto actDto) {
    _activityService.UpdatePctComplete(actDto);
    return Ok();
}

我在帖子中添加了fromBodyfromUri,但它不起作用。我在这里缺少什么?

这是我的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; }
}

1 个答案:

答案 0 :(得分:0)

我已经尝试过您的代码和动作过滤器对我来说很好。要诊断您的问题,请检查以下内容:

  1. 您是否使用ActionFilterAttribute命名空间中的System.Web.Http.Filters?来自System.Web.Mvc的过滤器存在常见问题。
  2. 您获得的HTTP结果是什么?可能是它在ASP.NET管道的某些早期阶段失败了,比如路由或身份验证?
  3. 您确定这个Post()方法确切地处理了请求吗?尝试设置断点并检查它是否命中。