首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Webapi单参数的Fluent验证

Webapi单参数的Fluent验证
EN

Stack Overflow用户
提问于 2018-10-30 00:57:55
回答 1查看 666关注 0票数 0

我使用webapi2和Fluent验证来验证请求。我使用下面的方法。

代码语言:javascript
运行
复制
public IHttpActionResult Post(string id)
{}

我想向id添加验证,比如正则表达式验证和长度验证。有没有什么方法可以使用与[FromQuery]语法相同的自定义验证器属性

EN

回答 1

Stack Overflow用户

发布于 2018-11-05 18:33:06

我已经创建了一个自定义参数绑定属性来执行验证。

代码语言:javascript
运行
复制
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);
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53050340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档