2016-12-27 1 views
1

У меня возникают проблемы с запросом PUT с использованием REST Client. Я пробовал то же самое в Postman, и я возвращаю сообщение ErrorResponse с правильным сообщением об ошибке. Поэтому я ожидал этого в вызове запроса C# - RestSharp. Вместо этого я получаю 500 Internal Server Error, с request.ErrorException = null и request.ErrorMessage = null. Прежде чем кто-либо обвинит меня в заголовке запроса, я установил request.AddHeader («Accept», «application/json»);RestClient - Request возвращает 500 ошибок внутреннего сервера (содержимое как html) и no ErrorMessage

Мой код-то вроде этого

var client = new RestClient(uri); 
var request = new RestRequest(Method.PUT); 
request.AddHeader("Accept", "application/json");` 
request.AddParameter("xx...", value); 
var response = client.Execute(request); 
var content = response.Content; 

Так что теперь response.Content я вижу следующий HTML (я просто опубликовать частичное содержание для информации)

<html> 
    <head> 
     <title>Runtime Error</title> 
     <meta name="viewport" content="width=device-width" /> 
     <style> 
     body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
     p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px} 
     b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px} 
     H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red } 
     H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon } 
     pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt} 
     .marker {font-weight: bold; color: black;text-decoration: none;} 
     .version {color: gray;} 
     .error {margin-bottom: 10px;} 
     .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; } 
     @media screen and (max-width: 639px) { 
      pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; } 
     } 
     @media screen and (max-width: 479px) { 
      pre { width: 280px; } 
     } 
     </style> 
    </head> 

    <body bgcolor="white"> 
..... 

.... 
</html> 

На данный момент в моем wrapper method Я проверяю, не является ли StatusCode не 200, тогда если request.ErrorException является нулевым, в этом случае нужно просто показать общее сообщение «что-то пошло не так ...». На данный момент это всего лишь бандатное решение. Я хотел бы знать, как получить точный ответ об ошибке или как справиться с этой ситуацией.

Любая помощь очень ценится.

ответ

0

В веб-службах фактическая ошибка никогда не будет возвращена, если вы явно не установили сообщение об ошибке в одно из своих свойств. Например, в WebAPI вы можете вернуть сообщение об ошибке с помощью метода Request.CreateResponse(). Метод должен вернуть тип HttpResponseMessage. Ниже приведен код

[HttpPut] 
public HttpResponseMessage MyPutMethod() 
{ 
try 
{ 
...process 
return Request.CreateResponse(HttpStatusCode.OK, "Success"); 
} 
catch (Exception ex) 
{ 
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); 
} 
} 

ПРИМЕЧАНИЕ. Нежелательная отправка исключений из соображений безопасности.

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