WebRequest.GetResponse()抛出错误401:未经授权

时间:2011-04-06 20:33:16

标签: c# asp.net iis httpwebrequest

我有一个ASP.NET应用程序,我正在尝试将以前访问过的本地aspx页面输出到html(它是一个报告,我想将它的静态html副本存储为存档)。我存储本地页面的uri:

Session["SummaryURI"] = Request.Url.AbsoluteUri;

然后在下一页中我用:

检索它
string url = Session["SummaryURI"].ToString();

url = url.Replace("static=false", "static=true");
//MessageLabel.Text = url;

//CREATE THE NEW FILE
WebRequest req = WebRequest.Create(url);
WebResponse res = req.GetResponse();

部分req.GetResponse()是我收到错误的地方(401 Unauthorized)。

我是否需要在IIS中配置一些内容以允许此操作?

我是否需要编辑文件权限或其他内容?

感谢您的帮助

顺便说一句,这在我的本地IIS上工作正常,但不在我的测试服务器上。

4 个答案:

答案 0 :(得分:24)

如果您无法启用匿名身份验证,请尝试将此添加到您的WebRequest:

req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;

答案 1 :(得分:10)

我认为问题在于测试IIS服务器上的身份验证。 两个选项:

1)在测试IIS服务器上为站点启用“匿名身份验证”。

2)(推荐)    在向测试服务器发出请求之前,请使用下面的代码模板以及可以针对测试服务器进行身份验证的正确的用户名/密码/域信息。

System.Net.NetworkCredential netCredential = 
        new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;

答案 2 :(得分:3)

截至目前,我无法访问IIS设置,因此无法启用Anonymous Authentication,这很可能是为什么Cyber​​nate的答案对我不起作用。然而,我确实找到了一种更简单的方法。而不是使用WebRequest我发现我可以使用Server.Execute做同样的事情。以下是我的新解决方案:

string strHTML = String.Empty;
using (var sw = new StringWriter())
{
    Server.Execute([path-to-local-aspx], sw);
    strHTML = sw.ToString();
}

string relativeReportPath = [relative-path-to-new-html-file];

using (StreamWriter writer = File.CreateText(Server.MapPath(relativeReportPath)))
{
    writer.WriteLine(strHTML);
    MessageLabel.Text = "Your report is ready. Click Close to close the window.";
}

答案 3 :(得分:0)

也许代理人打扰了您。查看此处以了解如何禁用它:How to remove proxy from WebRequest and leave DefaultWebProxy untouched

此外,也许您在端点的斜线处缺少斜线:

Endpoint = $"https://your.api.com/id=111/"; /* <-- attention to the trailing slash */