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

use*_*677 5 c# .net-core asp.net-core

使用.NET Core 2.0 WebApi。

我有一个webapi,其中有许多端点,每个端点都在处理失败时抛出异常并抛出BadRequest。如下:

if(data == null)
{
   return BadRequest("Data must not be blank.");
}
Run Code Online (Sandbox Code Playgroud)

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

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

- 更新 - -

我想要这样的东西:

    public static BadRequest GetBadRequestMessage(string message)
    {
        return BadRequest(message);
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

    public static BadRequestResult GetBadRequestMessage(string message)
    {
        return new  BadRequestResult(message);
    }
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:严重级代码说明项目文件行抑制状态错误CS1729'BadRequestResult'不包含采用1个参数的构造函数

Nko*_*osi 8

可以手动初始化动作结果

return new BadRequestObjectResult("error message here");
Run Code Online (Sandbox Code Playgroud)

这基本上是ControllerBase内部所做的

/// <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);
}
Run Code Online (Sandbox Code Playgroud)

来源