У меня есть немного промежуточного программного обеспечения, написанное, что при обратном вызове проверяется, является ли ответ 500. Если это 500, я хочу вернуть исключение, которое было выбрано. Как получить исключение, которое было добавлено в приложение?Получите исключение, которое было выбрано ранее в приложении C#?
Startup.cs
...
app.UseMiddleware<APIExceptionMiddleware>();
// Add MVC to the request pipeline.
app.UseMvc();
...
APIExceptionMiddleware.cs:
public class APIExceptionMiddleware
{
private readonly RequestDelegate _next;
public APIExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
context.Response.OnStarting(
callback: (state) =>
{
HttpResponse response = (HttpResponse)state;
if (response.StatusCode == 500)
{
// want to grab exception here turn it into JSON response place it in the response.Body but not sure how I access the exception.
return response.WriteAsync("An Error Occured");
}
return Task.FromResult<object>(null);
}, state: context.Response);
await _next.Invoke(context);
}
}
Так как запрос идет в UseMvc() У меня есть исключение, которое выдается. Я могу использовать app.UseDeveloperException(); и получить приятную дружественную HTML-страницу с помощью stacktrace и exception.
Я хочу почти повторить это, но сделаю его приятным дружественным ответом АИС для JSON для моего приложения. SO, если выбрано 500, я использую промежуточное ПО, где я собираюсь превратить это в симпатичный ответ json и отправить его в качестве своего ответа через запрос api. Моя проблема в том, как получить это исключение в промежуточном программном обеспечении?
Если UseDeveloperException() делает это, не должен ли я иметь возможность?
context.Error? – pnm
нет контекста.Error – allencoded
Вы имеете в виду, что нет выставленного объекта недвижимости или его нет в наличии? – pnm