.net 正在读取自定义HttpWebResponse状态描述?
当抛出异常时,我正在RESTful WCF服务中设置自定义StatusDescription。这是为了给调用者提供一个友好的描述,说明他们为什么会得到故障状态码 下面是我在Fiddler中看到的反应。因此,我知道我的自定义消息将被推回到调用方。我搞不懂的是如何从.NET检索该消息。StatusDescription不包含此字符串 如果您能提供一个简单的示例代码,那就太好了 HTTP/1.1500消息:“引发了类型为“Exceptions.DataSourceNotFoundException”的异常。”Uri:.net 正在读取自定义HttpWebResponse状态描述?,.net,wcf,rest,httpwebresponse,status,.net,Wcf,Rest,Httpwebresponse,Status,当抛出异常时,我正在RESTful WCF服务中设置自定义StatusDescription。这是为了给调用者提供一个友好的描述,说明他们为什么会得到故障状态码 下面是我在Fiddler中看到的反应。因此,我知道我的自定义消息将被推回到调用方。我搞不懂的是如何从.NET检索该消息。StatusDescription不包含此字符串 如果您能提供一个简单的示例代码,那就太好了 HTTP/1.1500消息:“引发了类型为“Exceptions.DataSourceNotFoundException”的
内容长度:0
服务器:Microsoft HTTPAPI/2.0
日期:2009年4月20日星期一07:13:40 GMT 更新
这个问题的答案在Silverlight中不起作用。在Silverlight 2和3测试版中进行了测试。不是.NET程序员,在msdn上发现了这一点
catch(WebException ex)
{
string message = ((HttpWebResponse)ex.Response).StatusDescription;
}
我已经很多年没有使用.NET了,但在Java中,人们通常希望得到404未发现错误的HTTP代码和消息,而404实际上让Java抛出FileNotFoundException。对于这些情况,在Java中应该使用而不是
#getResponseMessage
那么:在一个.NET客户机上,500个响应可能会发生类似的事情?实际上,各国:
HttpWebRequest类在访问资源时发生错误时抛出错误。属性包含一个指示错误来源的值。当为时,属性包含从资源接收的
详细信息:上面指向响应
的链接指的是WebException.Response
,而不是to。因此,WebException
有自己的Response
属性。下面的示例基于文档,但我没有测试它
重要提示:请注意,这并不使用来自HttpWebRequest
的GetResponse
,而是来自WebException
的Response
:
try {
HttpWebRequest myHttpWebRequest =
(HttpWebRequest) WebRequest.Create("http://www.example.org/not_found");
HttpWebResponse myHttpWebResponse =
(HttpWebResponse) myHttpWebRequest.GetResponse();
myHttpWebResponse.Close();
}
catch(WebException e) {
Console.WriteLine("Exception Message: " + e.Message);
if(e.Status == WebExceptionStatus.ProtocolError) {
Console.WriteLine("Status Code: {0}",
((HttpWebResponse)e.Response).StatusCode);
Console.WriteLine("Status Description: {0}",
((HttpWebResponse)e.Response).StatusDescription);
}
}
catch(Exception e) {
Console.WriteLine(e.Message);
}
我认为你的问题是你的身份代码是500。当状态代码不正常(200或某种类型的重定向)时,WebRequest.GetResponse()调用在.NET中引发WebException 此异常实际上将包含StatusDescription集为的HttpWebResponse对象。以下样本来自MSDN:
public static void GetPage(String url)
{
try
{
// Creates an HttpWebRequest for the specified URL.
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
// Sends the HttpWebRequest and waits for a response.
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}",
myHttpWebResponse.StatusDescription);
// Releases the resources of the response.
myHttpWebResponse.Close();
}
catch(WebException e)
{
Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("\nThe following Exception was raised : {0}",e.Message);
}
}
资料来源:
要实际获取状态,需要从异常本身获取HttpWebResponse对象:
try {
// Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name.
HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid site");
// Get the associated response for the above request.
HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse();
myHttpWebResponse.Close();
}
catch(WebException e) {
Console.WriteLine("This program is expected to throw WebException on successful run."+
"\n\nException Message :" + e.Message);
if(e.Status == WebExceptionStatus.ProtocolError) {
Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
}
}
catch(Exception e) {
Console.WriteLine(e.Message);
}
来源:我不知道这是否是复制/粘贴,但“Uri:”标题与状态代码在同一行——这可能是个问题 大多数原因码都是几个没有“:”和引号的单词:因此我怀疑标头解析器认为“Message:”是HTTP标头的开始(请检查webResponse.Headers[“Message”])
您可以添加一个标题(例如,X-Error-Details)。Errrr,这与以前的答案有什么不同?@spoon16,请解释一下为什么您更改了这个错误的答案,然后将其作为最佳答案?