首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebApi:在ApiController之外创建自定义BadRequest状态

WebApi:在ApiController之外创建自定义BadRequest状态
EN

Stack Overflow用户
提问于 2018-08-31 17:30:58
回答 2查看 6.5K关注 0票数 9

使用.NET Core2.0 WebApi。

我有一个webapi,它有许多端点,每个端点在失败时处理和抛出BadRequest。详情如下:

代码语言:javascript
复制
if(data == null)
{
   return BadRequest("Data must not be blank.");
}

现在,由于这些状态代码在我的api中是重复的,我正在考虑创建一个Helper方法,该方法将BadRequest返回到我的API。

所以我创建了一个静态助手类。但这里的问题是,BadRequest是ControllerBase的一部分,在我的助手类中不可用。创建此方法返回BadRequest的最佳方法是什么。

-更新

我想要这样的东西:

代码语言:javascript
复制
    public static BadRequest GetBadRequestMessage(string message)
    {
        return BadRequest(message);
    }

我也曾尝试过:

代码语言:javascript
复制
    public static BadRequestResult GetBadRequestMessage(string message)
    {
        return new  BadRequestResult(message);
    }

但这会导致错误:严重程度代码描述项目文件行抑制状态错误CS1729 'BadRequestResult‘不包含带有1个参数的构造函数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-31 17:34:18

您可以手动初始化操作结果。

代码语言:javascript
复制
return new BadRequestObjectResult("error message here");

这基本上就是ControllerBase内部所做的。

代码语言:javascript
复制
/// <summary>
/// Creates an <see cref="BadRequestResult"/> that produces a <see cref="StatusCodes.Status400BadRequest"/> response.
/// </summary>
/// <returns>The created <see cref="BadRequestResult"/> for the response.</returns>
[NonAction]
public virtual BadRequestResult BadRequest()
    => new BadRequestResult();

/// <summary>
/// Creates an <see cref="BadRequestObjectResult"/> that produces a <see cref="StatusCodes.Status400BadRequest"/> response.
/// </summary>
/// <param name="error">An error object to be returned to the client.</param>
/// <returns>The created <see cref="BadRequestObjectResult"/> for the response.</returns>
[NonAction]
public virtual BadRequestObjectResult BadRequest(object error)
    => new BadRequestObjectResult(error);

/// <summary>
/// Creates an <see cref="BadRequestObjectResult"/> that produces a <see cref="StatusCodes.Status400BadRequest"/> response.
/// </summary>
/// <param name="modelState">The <see cref="ModelStateDictionary" /> containing errors to be returned to the client.</param>
/// <returns>The created <see cref="BadRequestObjectResult"/> for the response.</returns>
[NonAction]
public virtual BadRequestObjectResult BadRequest(ModelStateDictionary modelState)
{
    if (modelState == null)
    {
        throw new ArgumentNullException(nameof(modelState));
    }

    return new BadRequestObjectResult(modelState);
}

来源

票数 11
EN

Stack Overflow用户

发布于 2021-08-20 13:40:59

BadRequestConfig核心5项目中,在ioc文件夹/类库中创建.net类:

代码语言:javascript
复制
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;

namespace Ioc
{
    public static class BadRequestConfig
    {
        // error 400 handling - remove extra fields in error model - remove if(ModelState.IsValid)
        public static IMvcBuilder AddBadRequestServices(this IMvcBuilder services)
        {
            services.ConfigureApiBehaviorOptions(options =>
            options.InvalidModelStateResponseFactory = actionContext =>
            {
                var modelState = actionContext.ModelState.Values;
                var allErrors = actionContext.ModelState.Values.SelectMany(v => v.Errors);
                return new BadRequestObjectResult(new
                {
                    StatusCode = 400,
                    Message = string.Join(" - ", allErrors.Select(e => e.ErrorMessage))
                });
            });

            return services;
        }
    }
}

然后在AddBadRequestServices()文件中的ConfigureServices方法中添加startup.cs方法:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbServices();
        services.AddAppServices();
        services.AddControllers().AddBadRequestServices(); // here
        services.AddJwtAuthentication();
        services.AddSwaggerServices();
    }

通过此解决方案,不必在操作中写入if(ModelState.IsValid)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52120295

复制
相关文章

相似问题

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