如何在获取HttpRequest错误后绕过并继续

时间:2009-08-31 15:45:29

标签: asp.net

我有以下代码。 (我不知道我是否正在根据我的目标捕获这个......记录并继续)

        // Create the atual Request instance
        HttpWebRequest request = CreateWebRequest(requestURI, data.Length);
        request.ContentLength = data.Length;
        request.KeepAlive = false;
        request.Timeout = 30000;

        try
        {
            requestStream = request.GetRequestStream();
            requestStream.Write(data, 0, data.Length);
            requestStream.Close();

            // get response
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (response)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    _requestError = true;
                    string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
                    throw new ApplicationException(message);
                }

                responseStream = response.GetResponseStream();
            }
        }
        catch (Exception ex)
        {
            _requestError = true;
        }

无法解析远程名称:'api10.aaa.com' 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.Net.WebException:无法解析远程名称:'api10.aaa.com'

Source Error:

Line 87:                     {
Line 88:                         if (response.StatusCode != HttpStatusCode.OK)
Line 89:                         {
Line 90:                             _requestError = true;
Line 91:                             string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);

我们的global.asax ApplicationError会捕获堆栈中的任何错误。

现在我的问题:我故意将Uri更改为无效以便我出于测试目的而出错并添加到_requestError boo私有字段标志中,如果有的话我想要公开在请求期间发生错误。因为我想测试请求失败的情况。如果请求失败,我希望能够记录并继续...不停止。现在,它停止了。我希望能够通过我公开的公共属性访问_requestError。上面的代码实际上是在一个基本请求类中。在我的一个代码隐藏中,我正在使用这个类的实例,并调用上面的代码。我希望能够得到一个bool标志,如果发生任何重大事件的请求错误,因为在我背后的代码中我将它记录到某些表...不是我们的日志表,而是与某些业务逻辑和一些相关的其他东西certian其他对象。所以我的观点是,我无法让这段代码停止运行时。我希望在发生此错误后继续,否则我将永远无法利用我的公共财产来解决_requestError。

1 个答案:

答案 0 :(得分:0)

在我看来,传递给requestUri变量的值是“api10.aaa.com”。

尝试在浏览器中输入该内容,看看会发生什么。您需要将requestUri设置为有效的uri,这意味着您可以在浏览器中键入并导航到。

<强> 加入

如果它是“http://api10.aaa.com”??

,这可能会起作用 在评论和代码修改后添加了

行。这是有道理的,

然后我相信发生的事情是错误发生在这一行:

requestStream = request.GetRequestStream();

如果是这种情况,那么try块中的任何其他内容都不会执行,因为异常会直接跳转到Catch块。

所以你必须在这一行上放一个try / catch,或者把你所有的其他代码移到“Finally”块。