代码之家  ›  专栏  ›  技术社区  ›  user1563677

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

  •  2
  • user1563677  · 技术社区  · 7 年前

    使用.NET Core 2.0 WebApi。

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

    if(data == null)
    {
       return BadRequest("Data must not be blank.");
    }
    

    现在,由于这些状态代码在我的api中是重复的,所以我想创建一个Helper方法,将BadRequest返回到我的api。

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

    --更新---

    我想要这样的东西:

        public static BadRequest GetBadRequestMessage(string message)
        {
            return BadRequest(message);
        }
    

        public static BadRequestResult GetBadRequestMessage(string message)
        {
            return new  BadRequestResult(message);
        }
    

    但这会给出错误:严重性代码描述项目文件行抑制状态

    1 回复  |  直到 7 年前
        1
  •  7
  •   Nkosi    7 年前

    return new BadRequestObjectResult("error message here");
    

    这基本上就是 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);
    }
    

    Source