Предоставить метод ошибки в WCF получает FaultException без подробностей - PullRequest
0 голосов
/ 07 сентября 2018

Я ввел IErrorHandler для моего сервиса, который должен вернуть 403 вместо o 400 в случае неправильной авторизации.
Вот как выглядит мой ProvideFault метод:

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
    if (((FaultException)error).Code.SubCode.Name == "FailedAuthentication")
    {
        WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Forbidden;
        WebOperationContext.Current.OutgoingResponse.StatusDescription =
            "StatusCode is forced to change in order to have the correct response on authentication.";
    }
}

Интересно, есть ли способ написать более приятную проверку для ошибки и ее кода состояния, или как получить исключение авторизации, а не FaultException ведьма более общего характера ?. Мне не нравится проверять после строки FailedAuthentication, и фактически ее авторизация не аутентификация ...

1 Ответ

0 голосов
/ 12 сентября 2018

Если вы используете C # 6.0 и выше, вы можете использовать Фильтры исключений .Пример:

public string Example() 
{
   try
   {
      /* Method Logic */
      return string.Empty;
   }
   catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("400"))
   {
      return "unauthorized";
   }
}

В вашем случае:

public string Example() 
{
   try
   {
      /* Method Logic */
      return string.Empty;
   }
   catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("400"))
   {
      ProvideFault(e, "", e.Message);
   }
}

public void ProvideFault(System.Net.Http.HttpRequestException error, MessageVersion version, ref Message fault)
{
   /* your logic according to your needs. */
}
...