2012-05-05 20 views
0

WebRequestを使用して、組織内のサーバーにコンソールアプリケーション経由でファイルをPOSTします。いくつかのオンライン調査の後、私は以下のコードを考え出すことができました。WebRequest POSTは "リモートサーバーがエラーを返しました:(405)メソッドが許可されていません"

try 
{ 
    RegisterString("Uploading encrypted file to server....Please wait!!"); 
    string url = @"http://localhost:3333/MySite/" 
    string filepath = @"C:\test.txt"; 
    WebRequest request = WebRequest.Create(url); 
    request.Method = "POST"; 
    request.PreAuthenticate = true; 
    request.Credentials = new NetworkCredential(ftp_username, ftp_password); 
    byte[] byteArray = Encoding.UTF8.GetBytes(filePath); 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = byteArray.Length; 


    //Here is the Business end of the code... 
    Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 
    //and here is the response. 
    WebResponse response = request.GetResponse(); 

    Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
    dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    string responseFromServer = reader.ReadToEnd(); 
    Console.WriteLine(responseFromServer); 
    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 

    RegisterString("File uploaded sucessfully");     

    try 
    { 
     //Delete file after transmission 
     File.Delete(filePath); 
    } 
    catch (Exception ex) 
    { 
     RegisterString(ex.Message); 
    } 

    WriteToLog("End"); 
    System.Threading.Thread.Sleep(5000); 
} 
catch (Exception ex) 
{ 
    RegisterString(ex.Message); 
    System.Threading.Thread.Sleep(5000); 
    WriteToLog("End"); 
} 

ただし、「405メソッドが許可されていません」という例外が表示されます。私が紛失しているものがありますか?

+0

レスポンスが* Method *について明示的に不平を言っているので、すでに 'request.Method =" GET ";'(POSTの代わりに)試しましたか? – Filburt

+0

私はこれが操作のもう片方のコードとはるかに関連していると思いますが、バイナリデータを持つHTTP POSTのMIMEタイプは通常multipart/form-dataです。投稿しているサービスが標準の種類のフォーム投稿を期待していない可能性はありますが、あなたのコンテンツタイプは 'application/x-www-form -urlencoded'となります。 –

+0

一度私はcontenttypeをmultipart/form-dataに変更しました。別のエラー(404)ファイルが見つかりません) – Jay

答えて

0

これはFTPサーバーですか?もしそうなら、メソッドはPOSTでなくPUTでなければなりません。

+0

そのWebサーバー...と私はputを使用しています。ここにサンプルがあります:WebClient client = new WebClient(); CredentialCache credCache =新しいCredentialCache(); credCache.Add(新しいUri(@ftp_url + filePath)、 "Basic"、 新しいNetworkCredential(ftp_username、ftp_password、 "africa")); client.Credentials = credCache; Uriアドレス=新しいUri(@ftp_url + filePath); WriteToLog(@ftp_url + filePath); バイト[] arrReturn = client.UploadFile(アドレス、 "PUT"、filePath); – Jay

関連する問題