2016-11-22 10 views
1

私はMVCプロジェクトをC#で使用しています。コントローラの1つで、外部ソースからHTTP POSTデータを受け取り、ファイルを保存しようとしています。私はいろいろなメソッドシグネチャを試しましたが、どのメソッドを使うのか分かりません。 URLに投稿しようとするたびに私のIISログに404エラーが表示されるため、動作しないことが分かります。フォームデータをMVCコントローラにポストすると404が見つかりませんエラー

私が試してみましたいくつかのことは、私はより多くの洞察力を試してみて、取得するために失敗した要求のログに出要求を

public ActionResult Index(FormCollection forms) 
public ActionResult Index(FormCollection forms, HttpPostedFileBase files) 
public ActionResult Index() 

書いていると私はヘッダがある参照してください。

Content-Length: 158293970 
Content-Type: multipart/form-data; boundary=--------------------9228c56ead9fc97c 
Accept-Encoding: gzip 
Host: myhostinformationhere 
User-Agent: SecurityCenter/5.3.1 (201604) 

どれでも提案?

さらに詳しい情報が見つかりました。私のサイトに投稿するコードは、curlを使ったPHPコードです。あまりにも多くのベンダーのソースコードを明らかにせずに、私は彼らが問題を解決するのに役立つかもしれないいくつかのことを見ています。ヘッダコードは、彼らはまた、私は次のように私のコードを更新しましたが、私は私のログになりまし

public ActionResult Index(HttpPostedFileBase upload) 
{ 
    if (upload != null && upload.ContentLength > 0) 
    { 
    var fileName = Path.GetFileName(upload.FileName); 
    var path = Path.Combine(Server.MapPath(~/Files/Uploads"), fileName); 
    upload.SaveAs(path); 
    } 

    return View(); 
} 
をタイムアウトエラーを取得しています。この

$postFields['reportType'] = $reportType; 
$postFields['reportContent'] = curl_file_create($pathInfo['filepath'],$pathInfo['type'],basename($pathInfo['filepath'])); 

のようなポストフィールドを追加している

$sendHeaders = array ("Except:","X-SecurityCenter: $uuid", "Accept: application/html; charset=utf-8",); 

です

上記のコードでは、ファイルがキャプチャされ、正しいディレクトリにアップロードされたことをフィドラーで確認しました。今すぐクライアントソフトウェアから投稿を取得する方法を理解する。

+0

ログには、どのURLが見つかりませんでしたか?要求がどこに送信されているのかは問題である可能性があります。 – CodingYoshi

+0

はい、ログには、アクセスされている正しいURLが表示されます。 – samack

+0

URLをコピーしてブラウザからアクセスできますか?データをポストするのではなく、最初に空のインデックスアクションを打つことを試みてください。エラーが発生した場合は、ブラウザにURLをコピーして貼り付け、何が起こるかを確認してください。 – CodingYoshi

答えて

0

この権利を理解している場合は、コントローラに別のアクションを追加する必要があります。インデックスアクションを使用してデータを試してみてください。このようなことを試してみてください。

[HttpPost] 
public ActionResult Save(HttpPostedFileBase file) 
{ 
    if(file != null) 
    { 
    } 

    // Return something to signify success/failure 
} 
+0

同じ名前の同じものを試しても、同じ結果が得られます。私はすぐにそれを一緒に投げ、それが動作することを確認するためにインデックスを使用しました – samack

+0

あなたは何をしようとしているいくつかのコードを投稿できますか?そうすれば、何が起こっているのかをよりよく把握できます。 – Justin

+0

ジャスティン私のサイトにフォームを投稿するPHPコードについては上記を参照してください。呼び出し元コードはベンダーによって提供されているため、変更することはできません。 – samack

0

コントローラに別のアクションを追加することができます。インデックスアクションを使用してデータを試してみてください。インデックスアクションは、データの表示にのみ使用され、データフォームのポスティングには使用されません。ここで

私のコード

[HttpPost] 
public ActionResult Save(HttpPostedFileBase file) 

{ 

    if(file != null) 

    { 

    } 

return view(); 

    // Return something to signify success/failure 

} 
+0

あなたは本当に簡単な点のために他の答えをコピーしましたか? – samack

0

あなたが試すことができますいくつかのことです。

は次のようにアクションメソッドを試してみてください:あなたがする必要がある

public ActionResult Index(HttpPostedFileBase files) 
{ 
    // your work... 
} 

次の事はリクエストボディ要求のを検査することです。これはIISログに記録されます。その本文をコピーし、次にその正確な要求を作成するためにFiddlerを使用します。 Hereは、Fiddlerを使用して投稿リクエストを作成する方法に関するチュートリアルです。あなたのMVCプロジェクトのGlobal.asax.csファイルで

、次のコードを入れては:

/// <summary> 
/// Handles the HttpApplication's Error event. 
/// </summary> 
protected void Application_Error() 
{ 
    // Put a breakpoint here to give you an idea of what is going wrong. 
    Exception exception = this.Server.GetLastError(); 
} 

また、あなたを助けるためにMVC route debuggerを使用することができます。

結論として、売り手から得ている正確な要求でFiddlerと一緒に働くようにしておきましょう。完了したら、ベンダー製品を使用して再試行してください。

また、Fiddlerを使用して、ベンダー製品からの要求を取得し、それを使用して要求を検査することもできます。

関連する問題