C# WebResponse 403错误是否有其他解决方案?
有很多关于WebResponse 403错误的帖子,但我的情况有点不同。我已经创建了一个控制台应用程序,它将作为任务在我的服务器上运行。控制台应用程序在WebRequest中传递用户电子邮件,并等待WebResponse接收带有返回参数的uri。几天前,下面的代码工作得很好,但另一位程序员为返回的web地址添加了一个新参数。我知道这是导致403错误的原因,因为如果我在IE中粘贴带有新参数的uri,它就会工作。但由于我有一个控制台应用程序,所以我不能返回web地址,至少我不这么认为 不幸的是,程序员说他不能将其更改回去,并说有一种方法可以接收uri或整个页面内容,我可以用这种方法处理它。我仍然不知道他在说什么,因为StreamReader需要一个WebResponse和我能想到的几乎所有其他解决方案 即使我得到一个403错误,响应仍然有带有我需要的参数的uri,因为我可以在IE的网址中看到它。所以我只需要响应uri。如果您能提供任何帮助,我将不胜感激。下面是给我出问题的方法C# WebResponse 403错误是否有其他解决方案?,c#,.net,webrequest,C#,.net,Webrequest,有很多关于WebResponse 403错误的帖子,但我的情况有点不同。我已经创建了一个控制台应用程序,它将作为任务在我的服务器上运行。控制台应用程序在WebRequest中传递用户电子邮件,并等待WebResponse接收带有返回参数的uri。几天前,下面的代码工作得很好,但另一位程序员为返回的web地址添加了一个新参数。我知道这是导致403错误的原因,因为如果我在IE中粘贴带有新参数的uri,它就会工作。但由于我有一个控制台应用程序,所以我不能返回web地址,至少我不这么认为 不幸的是,程序
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;
}
让我们遵循这个想法。我们将处理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;
}
}
你是说你的情况不同,但很可能不是。403表示您的身份未经验证。Internet Explorer很可能通过了Windows身份验证或类似的验证,这就是为什么IE没有给你这个错误。您应该能够通过观察网络流量进行验证(我推荐)。你也可以问另一个程序员你需要提供什么类型的身份验证。我问程序员身份验证的问题,他说我不需要提供身份验证。如果我在IE中粘贴uri,我仍然会在页面主体中收到403,但是响应uri包含我需要的新参数。那么你是说403完全是预期的?如果不需要身份验证,也许你应该让另一个程序员返回一个200 OK状态码。根据程序员的说法,是的。当他看到我遇到的问题时,他立即说我得到了错误,因为我没有传递系统返回结果的返回页。换句话说,我的应用程序抛出了403错误,这对我来说毫无意义,因为我在等待响应。听起来很可笑。也许试着假装通过一个返回页面。他希望你怎么通过回传页?这正是我想的。但是,您应该检查状态代码以确保它是403。如果是其他类型(例如404或500),您可能不想尝试处理响应。@mason我修改了catch中的代码,以获得403、404和500三个异常。谢谢你的帮助。