Я создаю ASP.NET Core Api с промежуточным программным обеспечением для глобальной обработки исключений. В классе Startup
я настроил некоторые параметры JSON, которые должны использоваться для всех контроллеров.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver()
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
}
Затем я создал специальное промежуточное программное обеспечение для обработки исключений. Промежуточное программное обеспечение должно регистрировать ошибку и возвращать ответ об ошибке как JSON. Проблема в том, что глобальный Newtonsoft JsonConvert
не использует параметры, которые указываются во время инициализации Mvc (довольно очевидно).
Код промежуточного программного обеспечения обработчика ошибок:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context, ILogger<ErrorHandlingMiddleware> logger)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex, logger);
}
}
private Task HandleExceptionAsync(HttpContext context, Exception ex, ILogger logger)
{
var errorResponse = new ErrorResponse { Message = ex.Message };
logger.LogError(ex, errorResponse.Message);
var result = JsonConvert.SerializeObject(errorResponse);
context.Response.ContentType = "application/json";
context.Response.StatusCode = 500;
return context.Response.WriteAsync(result);
}
}
Вопрос : есть ли способ использовать тот же сериализатор JSON, который используется в контроллерах, в моем специальном промежуточном программном обеспечении? Я хотел бы избежать настройки одной и той же конфигурации в двух разных местах.