2014-11-03 4 views
2

В настоящее время я делаю следующее для отправки сообщений об ошибках клиенту:Web API бросить пользовательских исключений обратно клиенту

HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Forbidden) 
{ 
    ReasonPhrase = "No rights to access this resource", 
}; 

throw new HttpResponseException(message); 

Однако я хотел бы дополнительно улучшить ответ, посылая обратно пользовательские исключения , Так что я могу иметь что-то вроде этого:

public class MyAppException : Exception {} 

public class NoRightsException : MyAppException {} 
public class SaveException : MyAppException {}  
//etc... 

Все мои исключения будут находиться в отдельной сборке, которая будет ссылка на сервере и на клиенте.

Как лучше всего вернуть эти исключения клиенту и как клиент должен будет проверить, является ли ответ моим настраиваемым исключением, другим исключением или просто текстовым сообщением?

+1

Это может помочь вам прочитать здесь HTTP: //stackoverflow.com/questions/10732644/best-practice-to-return-errors-in-asp-net-web-api Особенно пример, где он объяснил, используется метод Request.CreateResponse –

ответ

1

Чтобы ответить на первую часть вашего вопроса ... правильный способ возврата исключений - использовать Request.CreateErrorResponse. Этот метод имеет ряд перегрузок, один из которых принимает исключение в качестве параметра. В вашем случае вы можете сделать ...

Request.CreateErrorResponse(HttpStatusCode.BadRequest, new NoRightsException()); 

Update:

Хотя не указано, что ваш метод клиент я предполагаю, что вы используете HttpClient. Если это так, вы должны сделать вызов похож на это ...

var client = new HttpClient(); 

var task = client.PostAsync(url) 
      .ContinueWith(response => 
      { 
       response.Result.EnsureSuccessStatusCode(); 
      }); 

task.Wait(); 

в этом случае вы увидите текст или исключение в классе ответа

+0

Я использую HttpClient. Обычное исключение не десериализуется вообще. Все, что я вижу, это то, что ответ генерирует исключение с кодом состояния BadRequest. –

+0

Я не использовал его для исключения исключений. Я использую шаблон для регистрации исключения на сервере, и клиент отобразит общую страницу ошибки, если запрос не привел к HttpResponse.OK –

Смежные вопросы