使用.NET Core2.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);
}但这会导致错误:严重程度代码描述项目文件行抑制状态错误CS1729 'BadRequestResult‘不包含带有1个参数的构造函数
发布于 2018-08-31 17:34:18
您可以手动初始化操作结果。
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);
}发布于 2021-08-20 13:40:59
在BadRequestConfig核心5项目中,在ioc文件夹/类库中创建.net类:
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方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbServices();
services.AddAppServices();
services.AddControllers().AddBadRequestServices(); // here
services.AddJwtAuthentication();
services.AddSwaggerServices();
}通过此解决方案,不必在操作中写入if(ModelState.IsValid)。
https://stackoverflow.com/questions/52120295
复制相似问题