簡體   English   中英

ASP.NET Core自定義驗證屬性未觸發

[英]ASP.NET Core Custom Validation Attribute Not Firing

我在API Controller中有一個GET方法。 我希望使用自定義驗證屬性來驗證該方法,如下所示。 但是由於某些原因,它沒有被解雇。

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
    public class CheckValidRoute : ValidationAttribute
    {
        private readonly string _apiRoute;
        private readonly string _operation;

        public override bool RequiresValidationContext { get { return true; } }

        public CheckValidRoute(string apiRoute, string operation)
        {
            _apiRoute = apiRoute;
            _operation = operation;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
           //Validation logic here
        }
    }

調節器

public class TestController : ControllerBase
    {
        [HttpGet("production/{movieId}/Test")]
        [ProducesResponseType(typeof(ResponseModel<string>), 200)]
        [Authorize(Policy = SecurityConstants.PseudofilmAuthorizationPolicy)]
        [CheckValidRoute("production/{movieId}/Test", "GET")]
        public async Task<ResponseModel<string>> TestGet(long movieId)
        {
            return ResponseModelHelper.BuildResponse("Success", $"production/{movieId}/Test", "Test");
        }
    }

我不確定我在這里缺少什么。

-Alan-

您使用錯誤的基類來實現您的屬性。 Models上使用ValidationAttribute來驗證其屬性值。 一個示例是Required屬性。

在您的情況下,您想實現一個ActionFilter ,它可以應用於控制器方法,並且可以在調用該方法之前執行驗證。 一個適合您的示例是:

public class CheckValidRouteAttribute : ActionFilterAttribute
{
    private readonly string _apiRoute;
    private readonly string _operation;

    public CheckValidRouteAttribute(string apiRoute, string operation) : base()
    {
        _apiRoute = apiRoute;
        _operation = operation;
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var request = context.HttpContext.Request;

        var method = request.Method;

        if (string.Compare(method, _operation, true) != 0)
        {
            context.Result = new BadRequestObjectResult("HttpMethod did not match");
        }
    }
}

OnActionExecuting方法中,您可以對HttpContext.Request對象執行檢查。 我把它留給您作為練習,因為我不知道您的確切要求:-)

在將此屬性應用於控制器方法之后,將在調用控制器方法之前調用OnActionExecuting ,以便您可以進行驗證。

您可以在此處閱讀有關ActionFilters的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM