WebClient将文件上传到网络

问题描述:

我想知道我是否正确编码。要手动将文件上传到我的工作区服务器,我必须使用登录ID和密码。有了下面的代码,我是否应该包含我的loginID和密码?WebClient将文件上传到网络

public void SaveLogsToWeb(string logFileName) 
    { 
     WebClient webClient = new WebClient(); 
     string webAddress = null; 
     try 
     { 
      webAddress = @"http://myCompany/ShareDoc/"; 

      webClient.Credentials = CredentialCache.DefaultCredentials; 

      WebRequest serverRequest = WebRequest.Create(webAddress); 
      WebResponse serverResponse; 
      serverResponse = serverRequest.GetResponse(); 
      serverResponse.Close(); 

      webClient.UploadFile(webAddress + logFileName, "PUT", logFileName); 
      webClient.Dispose(); 
      webClient = null; 
     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.Message); 
     } 
    } 

当我运行它,异常抛出 “(401)未经授权”

感谢。

+1

这是一个web应用程序或一个控制台应用程序? – sestocker 2010-01-19 03:59:32

+0

这是一个Windows窗体应用程序。 – Bopha 2010-01-19 18:29:41

您不应该在代码文件中包含用户/密码信息。这是抛出一个401的原因是因为互联网用户和它运行的应用程序池没有写入您要写入目录的写入权限。

右键单击该目录并添加/ ASPNET和/ Network Service作为具有写入权限的用户。这应该可以解决问题。确保你隔离目录。

这里的好就可以了MSDN文章:http://support.microsoft.com/kb/815153

+0

感谢您的信息。当我回家时我会阅读。再次感谢。 – Bopha 2010-01-19 03:53:31

+0

按照提供的链接,它只提到了ASPNET,但我使用C#将文件上传到网络。这是我没有得到的部分。在它与上面的代码一起工作之前,但是当我再次执行相同的程序时,它会抱怨未经授权的程序。 – Bopha 2010-01-19 17:37:17

+0

是的,上面的代码片段有效,但许可不是基于上面的代码。它位于IIS /文件系统级别。 401始终是Web服务器无权执行本地文件系统上的操作的时候。通常它会涉及缺少“读取”访问权限,但在这种情况下,您正在尝试进行实际写入,以便服务器上的Web进程需要新的写入权限。 – 2010-01-19 17:42:53

很晚了,也许,但是,你可以添加这两条线webClient.Upload..之前得到它固定:

webClient.Headers["Accept"] = "/"; 
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");