Web Api Required Parameter

前端 未结 5 839
闹比i
闹比i 2020-12-14 06:10

Using ASP.NET Web API. Is there a way to automatically return a status code 400 if a parameter is null? I found this question but that is a global solution that is applied

5条回答
  •  没有蜡笔的小新
    2020-12-14 06:52

    A solution for asp.net core...

    [AttributeUsage(AttributeTargets.Method)]
    public sealed class CheckRequiredModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var requiredParameters = context.ActionDescriptor.Parameters.Where(
                p => ((ControllerParameterDescriptor)p).ParameterInfo.GetCustomAttribute() != null).Select(p => p.Name);
    
            foreach (var argument in context.ActionArguments.Where(a => requiredParameters.Contains(a.Key, StringComparer.Ordinal)))
            {
                if (argument.Value == null)
                {
                    context.ModelState.AddModelError(argument.Key, $"The argument '{argument.Key}' cannot be null.");
                }
            }
    
            if (!context.ModelState.IsValid)
            {
                var errors = context.ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage);
                context.Result = new BadRequestObjectResult(errors);
                return;
            }
    
            base.OnActionExecuting(context);
        }
    }
    
    [AttributeUsage(AttributeTargets.Parameter)]
    public sealed class RequiredModelAttribute : Attribute
    {
    }
    
    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(CheckRequiredModelAttribute));
    });
    
    public async Task CreateAsync([FromBody][RequiredModel]RequestModel request, CancellationToken cancellationToken)
    {
        //...
    }
    

提交回复
热议问题