2011-03-31 119 views
1

我正在对REST服务进行API调用。如果提交的密码正确,则REST服务返回包含用户令牌的XML字符串,如果不是,则返回包含数据的XML字符串。HttpWebRequest /响应抛出错误“未找到”

下面是一个例子,如果密码不正确:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<authenticationResponse> 
    <statusCode>403</statusCode> 
    <errors> 
    <error> 
     .... 
    </error> 
    </errors> 
    <timestamp>2011-03-31 22:45:03 GMT</timestamp> 
</authenticationResponse> 

随着低于这个代码,它出现.NET在翻译这对实际的错误。我还是希望它读取XML数据和忽略任何错误:

RequestData requestData = (RequestData)result.AsyncState; 
HttpWebResponse response = 
       (HttpWebResponse)requestData.Request.EndGetResponse(result); 

我怎么能忽略错误,但仍然创造读取XML流?

回答

0

您的代码没有将其转换为实际错误 - 403的HTTP状态代码为“Forbidden”。

HTTP“未找到”的HTTP状态代码为404,因此它看起来像您请求的HTTP端点不存在于REST服务中。

+0

如果是这样的话,那么Fiddler和其他REST测试客户端如何拾取xml,即使我捕获并读取了我也不能?我知道这是一个合法的错误号码,但我不能确定这是一个合法的错误。 – Dave 2011-04-01 01:37:10

+0

@dave - 我不够你的具体实施,所以我不知道。我只是在解释404 - “未找到”<>“403” - “禁止”,因为在你的文章中,你认为你的XML中的403状态被翻译为实际的403状态。 – Kev 2011-04-01 07:48:13

0

好了,所以我想通了,这里有几部分组成。

首先,当传递的参数不符合期望值时,API将生成该xml。在这种情况下,如果密码不正确,它将返回403.

该错误是一个错误,所以框架将其视为这样,但错误包含响应无论如何,您只需要获取回应错误。这实质上是问题的答案。必须赶上错误,并将错误的响应拦截以读取流中的数据,这正是Mauricio所要达到的。

基本上,我想这里的所有答案都是正确的,或者它的一些部分,只是花了一点时间把它放在一起。

谢谢你们。

相关问题