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

Dan*_*iel 13 c# asp.net iis httpwebrequest

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

Session["SummaryURI"] = Request.Url.AbsoluteUri;
Run Code Online (Sandbox Code Playgroud)

然后在下一页中我检索它:

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();
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢你的帮助

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

Dan*_*iel 25

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

req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ndu 10

我认为问题是因为在测试IIS服务器上进行身份验证.两种选择:

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

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

System.Net.NetworkCredential netCredential = 
        new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 3

截至目前,我无法访问 IIS 设置,因此无法启用,Anonymous Authentication这很可能是 Cyber​​nate 的答案对我不起作用的原因。然而,我确实找到了一种更简单、有效的方法。WebRequest我发现我可以用 做同样的事情,而不是使用 a 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.";
}
Run Code Online (Sandbox Code Playgroud)