Прекратить отображение всей трассировки стека в веб-API

Обновить

router.navigateByUrl("/team/33/user/11", { skipLocationChange: true });
click me

Обновить

Существует PR для поддержки этого непосредственно https://github.com/angular/angular/pull/

  • https://github.com/angular/angular/issues/9949
  • Оригинал

    Вы можете реализовать пользовательский PlatformLocation аналогично BrowserPlatformLocation , но вместо вызова ot history.pushState(), history.replaceState(), history.back() и history.forward() сохраняют изменения в локальном массиве.

    Вы можете затем сделайте Угловое использование своей пользовательской реализации, предоставив ее как

    bootstrap(AppComponent, 
        [provide(PlatformLocation, {useClass: MyPlatformLocation})]);
    

    28
    задан Uwe Keim 29 July 2018 в 15:12
    поделиться

    1 ответ

    Для тех, кто хочет подавить только StackTrace и не отбрасывать важные подсказки об ошибках, вы можете реализовать ExceptionFilter.

    Вы можете сделать это в два этапа:

    1. Напишите свой фильтр следующим образом:

      using System.Web.Http.Filters;
      using System.Net;
      using System.Net.Http;
      
      public class MyExceptionFilterAttribute : ExceptionFilterAttribute
      {
          public override void OnException(HttpActionExecutedContext context)
          {
              var request = context.Request;
              var response = request.CreateErrorResponse(HttpStatusCode.InternalServerError, context.Exception.Message);
              var content = (System.Net.Http.ObjectContent<System.Web.Http.HttpError>)response.Content;
      
              var errorValues = (System.Web.Http.HttpError)content.Value;
              errorValues["ExceptionMessage"] = context.Exception.Message;
              errorValues["ExceptionType"] = context.Exception.GetType().Name;
              if (context.ActionContext != null)
              {
                  errorValues["ActionName"] = context.ActionContext.ActionDescriptor.ActionName;
                  errorValues["ControllerName"] = context.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
              }
      
              context.Response = response;
          }
      }
      
    2. заставить WebApi использовать ваш ExceptionFilter :

      public static void Register(HttpConfiguration config)
      {
          config.Filters.Add(new MyExceptionFilterAttribute());
      

    Вы получите это:

    {
      "Message": "Your exception is here!",
      "ExceptionMessage": "Your exception is here!",
      "ExceptionType": "Exception",
      "ActionName": "MyAction",
      "ControllerName": "MyController"
    }
    

    Дополнительная информация по адресу: https://docs.microsoft.com/en-us / САШ / веб-апи / обзор / обработки ошибок / обработки исключений

    3
    ответ дан Cesar 29 July 2018 в 15:12
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: