2011-04-06 169 views
12

我有一个ASP.NET应用程序,我试图将以前访问的本地aspx页面输出到html(它的报告,我想存储一个静态html副本它作为一个档案)。我存储在本地网页的URL以:WebRequest.GetResponse()抛出错误401:未授权

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,但不是我的测试服务器上。

+0

检查了这一点http://social.technet.microsoft.com/Forums/ en/winserversecurity/thread/c9239a89-fbee-4adc-b72f-7a6a9648331f – Aristos 2011-04-06 20:46:02

回答

3

截至目前我没有访问IIS设置,所以我不能让Anonymous Authentication这是非常可能的,为什么Cyber​​nate的回答并没有为我工作。然而,我确实发现了一种更简单的方法。我发现我可以用Server.Execute做同样的事情,而不是使用WebRequest。下面是我的新的解决方案:

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."; 
} 
+0

我刚刚注意到我得到了一些反对票。显然这是旧的,但有人可以解释为什么他们downvoted?谢谢。 – Daniel 2013-07-11 22:39:59

+0

我想你的解决方案对你的情况很好,我们中的大多数人最终会在这里寻找一种解决方案,发现@丹尼尔解决方案是正确的。无论如何,我没有投下你的票,只是猜测为什么有人会投票支持你。 – Esen 2016-10-19 12:39:51

9

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

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

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

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

对不起,花了这么长时间来回应,我刚刚回到这个错误。如果我们使用NT身份验证,这将工作吗?我尝试传递自己的用户名和密码 - 但仍然无法正常工作。 – Daniel 2011-04-12 00:50:55

+0

我认为重要的是要指出#2的上面的代码可以很好地处理一个警告。确保在上面指定的行后没有“UseDefaultCredientials”属性(例如UseDefaultCredientials = false;)。这样做会有效地“清除”你刚刚设置的信用卡。 – Bham503 2014-10-02 17:45:42

18

如果您不能启用匿名身份验证,尝试添加这给WebRequest:

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

像魅力一样工作,请注意使用缓存中的默认凭据,一些额外的信息对于原因很有帮助。 – Niklas 2017-08-02 07:09:54