簡體   English   中英

Webapi單參數的流利驗證

[英]Fluent Validation for Webapi Single parameter

我正在使用webapi2和Fluent驗證來驗證請求。 我有以下方法。

public IHttpActionResult Post(string id)
{}

我想向id添加驗證,例如正則表達式驗證和長度驗證。 有什么方法可以使用與[FromQuery]相同語法的自定義驗證器屬性?

我創建了一個自定義參數綁定屬性來進行驗證。

public class ValidateItemAttribute : ParameterBindingAttribute
{
        public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter) => new ItemIdValidation(parameter);
}

  public class ItemIdValidation : HttpParameterBinding, IValueProviderParameterBinding
    {
        public HttpParameterBinding DefaultUriBinding;
        public IEnumerable<ValueProviderFactory> ValueProviderFactories { get; }
        public ItemIdValidation(HttpParameterDescriptor desc) : base(desc)
        {
            var defaultUrl = new FromUriAttribute();
            this.DefaultUriBinding = defaultUrl.GetBinding(desc);
            this.ValueProviderFactories = defaultUrl.GetValueProviderFactories(desc.Configuration);
        }


        public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            return DefaultUriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken).ContinueWith((tsk) =>
            {
                var currentBoundValue = this.GetValue(actionContext)?.ToString();
                var isMatched = currentBoundValue != null ? Regex.IsMatch(currentBoundValue, "^[0-9]*$") : false;
                if (null != currentBoundValue && (!isMatched || currentBoundValue?.Length != 6))
                {
                    var result = new
                    {
                        ErrorCode ="1",
                        ErrorDescription = "Invalid item id"
                    };
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, result, "application/json");
                }
            }, cancellationToken);
        }
    }

暫無
暫無

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

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