积极答复者
远程服务器返回错误: (405) 不允许的方法。

问题
-
/// 得到文件名,文件扩展名字,服务器路径 string fileNamePath = Server.MapPath("~/FileTemp/DSC05786.JPG"); string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1); string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1); string uriString = "http://localhost:8011/FileUpLoad/"; if (uriString.EndsWith("/") == false) uriString = uriString + "/"; uriString = uriString + fileName; /// 创建WebClient实例 WebClient myWebClient = new WebClient(); myWebClient.Credentials = CredentialCache.DefaultCredentials; // 要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); try { Stream postStream = myWebClient.OpenWrite(uriString,"PUT");//打开输出流 if(postStream.CanWrite) { byte[] buffer = new byte[1024]; int len; do { len = fs.Read(buffer, 0, buffer.Length); if (len > 0) { postStream.Write(buffer, 0, len); } } while (len > 0); Response.Write( fileName + "上传成功!"); } else { Response.Write("文件目前不可写!"); } postStream.Close(); } catch(WebException errMsg) { Response.Write("上传失败:" + errMsg.Message); }
postStream.Close();在这里会抛异常:远程服务器返回错误: (405) 不允许的方法,在网上查了一下,这问题,各种说法都有,我也都试了,对IIS的某些设置改了一下,有时候报远程服务器返回错误403错误 有时候报远程服务器返回错误401错误,实在是搞不清楚了,各位老师,帮我看下怎么回事?对了我是用WebClient类上传到IIS的一个站点下的虚拟目录对应的物理路径下,我IIS站点里没有一个页面是专门用来处理接收流的,这有问题吗?比如我IIS上有个路径是http://localhost:8011/FileUpLoad/ 我想把文件上传到FileUpLoad文件夹, 我须要做其它什么处理不?求解答!!!!万分感谢!!主要帮我解决这讨厌的405错误!
答案
全部回复
-
孟老师你好,WebClient服务我已经开启的,IIS和物理文件夹的权限我都设置了允许Everyone可完全控制还设置 了IIS_IUSER完全控制,这样是不是就允许了匿名用户可写入呢?
另外上传路径要包括文件名,我已经是包括过文件名的, 第4点:IIS设置允许PUT操作,这点我有点不明白,我在IIS7里没设置过,是不是在IIS的功能视图里的 请求筛选里设置,如果是在这设置,我也已经设置了、PUT\GET\POST\DELETE 。可是我现在上传,还是报405错误,说不允许的方法,为什么是在关闭输出流的时候抛异常,是不是关闭的时候才正式开始请求啊?
do
{
len = fs.Read(buffer, 0, buffer.Length);
if (len > 0)
{
postStream.Write(buffer, 0, len);
}
} while (len > 0);
这个不是已经输出了么?