swagger 我可以为高于允许值的值自定义错误消息吗?

hlswsv35  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(111)

我想在swagger设置一个自定义消息,当一个比允许的值更高的值被通知时。我的控制器中有以下方法:

public async Task<IActionResult> MyMethod(short someValue)

在.Net中,short的最大值是32767,如果我传递一个更大的值,我会得到错误消息:“值'999999'无效。",是否有自定义该消息的方法?

2admgd59

2admgd591#

这是一个模型绑定错误而不是模型验证错误,你可以在这里尝试设置:

builder.Services.AddControllers(op => op.ModelBindingMessageProvider.SetNonPropertyAttemptedValueIsInvalidAccessor(input => input+" invalid")) ;

测试结果:

更详细的错误信息,需要自定义模型绑定器,例如:

public class MyBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            var modelName = bindingContext.ModelName;

            // Try to fetch the value of the argument by name
            var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
            if (valueProviderResult == ValueProviderResult.None)
            {
                return Task.CompletedTask;
            }

            bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);

            var value = valueProviderResult.FirstValue;

            if (!short.TryParse(value, out var id))
            {
                // add the logical compare the value and so on
                bindingContext.ModelState.TryAddModelError(
                    modelName, value+" is not valid for short.");

                return Task.CompletedTask;
            }

            return Task.CompletedTask;
        }
    }

应用modelbinder:

[ModelBinder(BinderType = typeof(MyBinder))] short someValue

结果:

相关问题