我一直在谷歌搜索解决方法并看到我们在控制器操作中作为ActionResult/JsonResult或使用HttpRequest如下方法返回错误文本时的示例
HttpContext.Current.Response.Status = "error text";
对于我的后台应用程序,我使用ASP.NET Core 2.1.1和.Status属性在缺少HttpResponse类。
此外,我找不到任何可能包含我的自定义错误消息的属性。
我使用中间件类,它获取异常描述并将其作为 JSON
Startup.cs
app.UseMiddleware<ExceptionHandleMiddleware>();
班级本身
public class ExceptionHandleMiddleware
{
private readonly RequestDelegate next;
public ExceptionHandleMiddleware(RequestDelegate next)
{
this.next = next ?? throw new ArgumentNullException(nameof(next));
}
public async Task Invoke(HttpContext context)
{
try
{
await next(context);
}
catch (Exception ex)
{
context.Response.Clear();
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
context.Response.ContentType = "application/json";
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
await context.Response.WriteAsync(JsonConvert.SerializeObject(new { error = $"{ex.GetType().FullName}: '{ex.Message}'" }));
}
}
}
看看行
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
这是必需的,因为在我的Angular 6 应用程序中,我使用HttpInterceptor,并且为了捕获错误,您应该返回一个 HTTP 错误(否则.catch(...)在 Angular 拦截器中不会触发该块)。
这是我的 Angular 应用程序中的一点
@Injectable()
export class ErrorHandlerInterceptor implements HttpInterceptor {
constructor(
private notify: NgNotify,
) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next
.handle(req)
.catch(this.handleError)
}
...
尽管context.Response.WriteAsync(...)bit确实返回了异常文本,但我无法.catch(...)在拦截器的块中提取它。
所以,我似乎无法从error: Response
.
也许,有人知道将错误传递给 Angular 客户端并在那里获取它的更好方法?
慕桂英3389331
茅侃侃
相关分类