C# 使用WebClient.UploadFile将文件上载到WebDAV服务器将返回401
我试图通过WebDAV将Windows客户端上的C#应用程序中的文件上载到Linux Web服务器。为了实现这一点,我使用了C# 使用WebClient.UploadFile将文件上载到WebDAV服务器将返回401,c#,.net,winforms,apache,webdav,C#,.net,Winforms,Apache,Webdav,我试图通过WebDAV将Windows客户端上的C#应用程序中的文件上载到Linux Web服务器。为了实现这一点,我使用了WebClient.UploadFile()。上载始终引发异常: 远程服务器返回错误:(401)未经授权 我尝试了两种不同的授权方法,结果都是一样的 授权: // Method A myWebClient.Credentials = new NetworkCredential("user123", "pass123"); // Method B var bytes = E
WebClient.UploadFile()
。上载始终引发异常:
远程服务器返回错误:(401)未经授权
我尝试了两种不同的授权方法,结果都是一样的
授权:
// Method A
myWebClient.Credentials = new NetworkCredential("user123", "pass123");
// Method B
var bytes = Encoding.UTF8.GetBytes(String.Format("{0}:{1}", "user123", "pass123"));
string auth = Convert.ToBase64String(bytes);
// "Basic aW1hZ2VfdXBsb2FkOkozMkUzYnVGWlB1S0tkQ2tQRkpV"
string authString = String.Format("Basic {0}", auth);
myWebClient.Headers.Add("Authorization", authString);
try
{
string address = "http://123.124.125.126/webdav/1";
string fileName = "F:\\articleimages\\isotope\\1\\1dmgo.jpg";
byte[] response = myWebClient.UploadFile(address, fileName);
}
catch (WebException wexc)
{
// wexc.Message == The remote server returned an error: (401) Unauthorized
}
为了确保WebDAV正常工作,我使用WinSCP
(Windows GUI)和cadaver
(Linux终端)连接并上传了文件
两者都取得了成功
文件上传代码:
// Method A
myWebClient.Credentials = new NetworkCredential("user123", "pass123");
// Method B
var bytes = Encoding.UTF8.GetBytes(String.Format("{0}:{1}", "user123", "pass123"));
string auth = Convert.ToBase64String(bytes);
// "Basic aW1hZ2VfdXBsb2FkOkozMkUzYnVGWlB1S0tkQ2tQRkpV"
string authString = String.Format("Basic {0}", auth);
myWebClient.Headers.Add("Authorization", authString);
try
{
string address = "http://123.124.125.126/webdav/1";
string fileName = "F:\\articleimages\\isotope\\1\\1dmgo.jpg";
byte[] response = myWebClient.UploadFile(address, fileName);
}
catch (WebException wexc)
{
// wexc.Message == The remote server returned an error: (401) Unauthorized
}
问题
- 到目前为止我的代码正确吗
- 我应该使用哪种授权?
或网络凭据
标题
- 我如何进一步排除故障
实际响应(异常详细信息)
401未经授权
未经授权
此服务器无法验证您是否
您有权访问该文档
请求。要么你提供的是错误的
凭据(例如,错误的密码)或您的
浏览器不了解如何提供
所需的凭据
WebClient
是HTTP客户端,而不是WebDAV客户端
如果执行WebClient.UploadFile
,则默认情况下,它使用HTTPPOST
请求,而不是WebDAVPUT
请求
身份验证失败可能只是其副作用。即使没有,而且您解决了身份验证问题,它可能也不会帮助您
我不知道它是否有帮助,但请尝试使用和使用“PUT”
WinSCP为您提供的另一个选项是使用。您可以查看异常详细信息。必须有更多的细节。检查wexc.Response,它有
GetResponseStream()
,您可以通读到末尾,查看是否有更多详细信息。您还可以使用网络分析器查看响应详细信息。你能补充一下你是如何通过其他方式(WinSCP或cadaver?)成功上传文件的吗?我在问题的末尾补充了答案。例如,在WinSCP中,我只需使用WebDav协议(端口80)和正确的用户名/密码打开一个新会话。然后像在ftp中一样上传文件(拖放)。这是完美的。我假设身份验证错误或未发送。这个wexc.Response看起来像是通过浏览器发出的具有错误凭据的请求。我正在使用apache的htaccess/htpasswd来请求凭据。这可能是问题所在吗?你的要求似乎是正确的。htaccess使用基本身份验证,您正在使用基本身份验证正确地请求站点。请查看apache日志。可能还有更多的细节。另外,为了更简单,只需尝试client.Headers[HttpRequestHeader.Authorization]=string.Format(“Basic{0}”,等等)代码>。可能是标题。添加会把事情搞砸。