none
远程服务器返回错误: (405) 不允许的方法。 RRS feed

  • 问题

  • /// 得到文件名,文件扩展名字,服务器路径
            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错误!

    2011年4月8日 3:49

答案

全部回复

  • 1,开启WebCLient访问

    2,设置iis和物理文件夹匿名可写入

    3,上传路径需要带文件名http://xxx/FileLoad/xxx.jpg

    4,iis设置允许PUT动作


    【孟子E章】
    • 已标记为答案 菜虫子 2011年4月15日 0:42
    2011年4月8日 14:41
    版主
  • 孟老师你好,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);
    这个不是已经输出了么?

    2011年4月10日 10:34