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メソッドが許可されていません」という例外が表示されます。私が紛失しているものがありますか?
レスポンスが* Method *について明示的に不平を言っているので、すでに 'request.Method =" GET ";'(POSTの代わりに)試しましたか? – Filburt
私はこれが操作のもう片方のコードとはるかに関連していると思いますが、バイナリデータを持つHTTP POSTのMIMEタイプは通常multipart/form-dataです。投稿しているサービスが標準の種類のフォーム投稿を期待していない可能性はありますが、あなたのコンテンツタイプは 'application/x-www-form -urlencoded'となります。 –
一度私はcontenttypeをmultipart/form-dataに変更しました。別のエラー(404)ファイルが見つかりません) – Jay