gpt4 book ai didi

http - 如何解析在异步 http 发布期间发生的内部服务器错误?

转载 作者:可可西里 更新时间:2023-11-01 16:39:21 26 4
gpt4 key购买 nike

我在 Windows Phone 7 上做的通常是一个简单的 http post(下面的代码)。当我在帖子中查看 fiddler 时,我从服务器看到了这个结果

HTTP/1.1 500 Internal Server Error Cache-Control: private Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/7.5 jsonerror: true X-AspNet-Version: 2.0.50727 X-Server: www03 X-Site: prod Date: Tue, 16 Aug 2011 03:49:51 GMT Content-Length: 220

{"Message":"We’re sorry ... }

当我 try catch 异步帖子时,除了

之外我找不到任何东西

{System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFoun...

我的问题是:如何从此异常中获取实际消息(在 fiddler 中显示)?或者我怎样才能完全避免这个异常并取回 json,以便我可以解析它以获取实际的错误消息?

提前致谢

    public void Checkout(ResponseAndCookies responseAndCookies)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/checkout");
request.ContentType = "application/json";
request.CookieContainer = responseAndCookies.CookieContainer;
request.Method = "POST";
request.AllowAutoRedirect = false;
request.Accept = "application/json";

request.BeginGetRequestStream(new AsyncCallback(GetRequest), request);
}

private void GetRequest(IAsyncResult asyncResult)
{
var json = "{\"valid\":true}";
byte[] byteArray = Encoding.UTF8.GetBytes(json);

HttpWebRequest request = (HttpWebRequest) asyncResult.AsyncState;
Stream newStream = request.EndGetRequestStream(asyncResult);
newStream.Write(byteArray, 0, byteArray.Length);
newStream.Close();

request.BeginGetResponse(new AsyncCallback(GetResponse), request);
}

private void GetResponse(IAsyncResult asyncResult)
{
var response = ReadResponse(asyncResult); //if I try catch this I get the exception listed above :(
}

private ResponseAndCookies ReadResponse(IAsyncResult result)
{
Stream dataStream = null;
HttpWebRequest request = (HttpWebRequest) result.AsyncState;
HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();

var responseAndCookies = new ResponseAndCookies
{CookieContainer = request.CookieContainer, Markup = responseFromServer};

return responseAndCookies;
}

最佳答案

HTTP 500 与“未找到”(即 HTTP 404)不同。所以你的异常(exception)实际上并不相关。无论如何,您显然需要阅读内容响应流。

您可以使用 WebException.Response 读取响应属性,在你的 catch 子句中。

话虽如此,我建议您研究一下类似 RestSharp 的框架.自己写那么多代码没意义。

关于http - 如何解析在异步 http 发布期间发生的内部服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com