WebResponse 403错误有另一种解决方案吗?

时间:2014-11-05 16:32:55

标签: c# .net webrequest

WebResponse 403上有很多帖子错误,但我的情况有点不同。我创建了一个控制台应用程序,它将作为我服务器上的任务运行。控制台应用程序在WebRequest中传递用户电子邮件,并等待WebResponse接收带有返回参数的uri。几天前,下面的代码工作得很好,但其中一个程序员为返回的网址添加了一个新参数。我知道这是导致403错误的事实,因为如果我用新参数粘贴IE中的uri它可以工作。但由于我有一个控制台应用程序,返回网址是我不能做的事情,至少我不这么认为。

不幸的是,程序员说他无法改回来并说有一种方法可以接收uri或整个页面内容,我可以这样处理它。我仍然不知道他在说什么,因为StreamReader需要一个WebResponse以及我能想到的几乎所有其他解决方案。

即使我收到403错误,响应仍然具有我需要的参数的uri,因为我可以在IE中的Web地址中看到它。所以我需要的只是回应uri。非常感谢您提供的任何帮助。以下是给我提问的方法。

String employeeInfo = "";
try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest
        .Create("http://example.com/subsub.aspx?instprod=xxx&vabid=emailaddress");
    using (HttpWebResponse webResponse = 
        (HttpWebResponse)request.GetResponse()) //Error occurs here. 403 Forbidden
    {
        Uri myUri = new Uri(webResponse.ResponseUri.ToString());
        String queryParamerter = myUri.Query;
        employeeInfo = HttpUtility.ParseQueryString(queryParamerter).Get("vres");
        if (employeeInfo != "N/A")
        {
            return employeeInfo;
        }
        else
        {
            employeeInfo = "0";
            return employeeInfo;
        }
    }
}
catch (WebException)
{
    employeeInfo = "0";
    return employeeInfo;
}      

1 个答案:

答案 0 :(得分:2)

让我们按照Jim Mischel's的想法。我们将处理WebException并使用异常的Response属性。

String employeeInfo = "";
try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com/subsub.aspx?instprod=xxx&vabid=emailaddress");
    using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse()) //Error occurs here. 403 Forbidden
    {
        Uri myUri = new Uri(webResponse.ResponseUri.ToString());
        String queryParamerter = myUri.Query;
        employeeInfo = HttpUtility.ParseQueryString(queryParamerter).Get("vres");
        if (employeeInfo != "N/A")
        {
            return employeeInfo;
        }
        else
        {
            employeeInfo = "0";
            return employeeInfo;
        }
    }
}
catch (WebException ex)
{
    HttpWebResponse response = ex.Response as HttpWebResponse;
    if(response.StatusCode != HttpStatusCode.Forbidden)
    {
        throw;
    }
    Uri myUri = new Uri(response.ResponseUri.ToString());
    String queryParamerter = myUri.Query;
    employeeInfo = HttpUtility.ParseQueryString(queryParamerter).Get("vres");
    if (employeeInfo != "N/A")
    {
        return employeeInfo;
    }
    else
    {
        employeeInfo = "0";
        return employeeInfo;
    }  
}