Использование ServiceExceptionHandler на RestServiceBase <T>

я пытаюсь использоватьServiceExceptionHandler на моем Serivce, который распространяетсяRestServiceBase

Я могу использоватьAppHost.ServiceExceptionHandler, тот'работает нормально. Мне нужна информация от пользователяHttpRequestЭто недоступно на уровне AppHost.

Так что я'я пытаюсь использоватьServiceExceptionHandler на уровне обслуживания. Хотя я поставил делегата на службуctor, егоnull когда возникло исключениеOnGet methodI»

public class StudentService : RestServiceBase
{ 
    public StudentService()
    {
        ServiceExceptionHandler = (request, exception) =>
        {
            logger.Error(string.Format("{0} - {1} \n Request : {2}\n", HttpRequest.UserName(), exception.Message, request.Dump()), exception);
            var errors = new ValidationErrorField[] { new ValidationErrorField("System Error", "TODO", "System Error") };
            return DtoUtils.CreateErrorResponse("System Error", "System Error", errors);
        };
    }
}

Я не уверен, в чем проблема с этим кодом. Любая помощь будет оценена.

Ответы на вопрос(1)

Решение Вопроса
Зарегистрировать глобальный AppHost.ServiceExceptionHandler

В вашемAppHost.Configure() Вы можете зарегистрировать глобальный обработчик исключений с помощью:

this.ServiceExceptionHandler = (request, ex) => {
   ... //handle exception and generate your own ErrorResponse
};

Для более детальных обработчиков исключений вы можете переопределить следующие настраиваемые обработчики событий службы:

Обработка исключений с помощью нового API

Если ты'используяНовый API Вы можете переопределить Исключение, предоставив настраиваемый бегун, например:

public class AppHost { 
  ...
    public virtual IServiceRunner CreateServiceRunner(
        ActionContext actionContext)
    {           
        //Cached per Service Action
        return new ServiceRunner(this, actionContext); 
    }
}

public class MyServiceRunner : ServiceRunner {
    public override object HandleException(
        IRequestContext requestContext, TRequest request, Exception ex) {
      // Called whenever an exception is thrown in your Services Action
    }
}
Обработка исключений со старым API

RestServiceBase это использует старый API, в котором вы можете обрабатывать ошибки, переопределяяHandleException метод, например:

public class StudentService : RestServiceBase
{ 
    ...

    protected override object HandleException(T request, Exception ex)
    {
        LogException(ex);

        return base.HandleException(request, ex);
    }
} 

Ваш ответ на вопрос