2011-12-03 12 views
2

jqueryでアクションメソッドを呼び出してファイルを削除しようとしています。しかし、何も起こりません。ファイルはまだ存在します。jqueryからMVCへのアクションでファイルを削除できません

data: { fileName: $('#pictureTitle').attr('src') } 

は、ファイル名を渡しているように見える:後

は、この行でアクションメソッドのコード

[HttpPost] 
    public ActionResult Remove(string fileName) 
    { 
     string completFileName = Server.MapPath("~/Content/Images/" + fileName); 
     System.IO.File.Delete(completFileName); 
     return Json(true); 
    } 
+0

ファイルはまだサーバーに残っていますか?もしajaxがjqueryの場合ではなくてうまくやっているのなら... Firebugコンソールでajaxが成功したかどうかを確認してください – Rafay

+0

どうしますか? – BNL

+0

あなたは例外を受け取りますか? – Baz1nga

答えて

6

jqueryのコード

$("#pictureRemove").click(function (e) { 
      $("#pictureImage").html("<img src='../../Content/Images/noDefaultImage_100.gif'/>"); 
      $(this).hide(); 
      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("Remove", "Category")', 
       data: { fileName: $('#pictureTitle').attr('src') }, 
       dataType: 'json' 
        // User your JSON response. 
      }); 
     }); 

続きですパラメタ一部のイメージのsrcパラメータからコントローラの動作に渡します。

<img id="pictureTitle" src="/Content/images/foo.jpg" /> 

はそう、あなたが存在することはほとんどありませんc:\wwwroot\Content\Images\Content\images\foo.jpgに翻訳されServer.MapPath("~/Content/Images//Content/images/foo.jpg")を削除しようとしていると、例外がスローされ、あなたのコントローラのアクションでそう/Content/images/foo.jpgを渡している。だから私はあなたがこのようないくつかのイメージを持っていると仮定します。

コントローラのアクションにブレークポイントを置き、さまざまなパラメータを調べるだけです。

これは、ファイル名を取得してサーバー上のファイルを削除するコントローラーアクションを公開することは、アプリケーションに大きなセキュリティホールがあることを示しています。

+0

f **** hell ....私は想像できるほど馬鹿だった。実際にpictureTileはファイル名だけを保持する範囲です。だから私は '$( '#pictureTitle')を使う必要があった。text()' ....このばかげたミスや愚かさには大変残念。これを入れて私の頭をまっすぐにしてくれてありがとうDarinありがとうございます –

+0

私のコントローラは管理者のためにAuthorize属性を使用しています。まだセキュリティが要因になることができますか? –

+1

はい、ファイルパスが検証なしで削除コードに挿入されているためです。悪質な攻撃者が "../../../Domain.dll"を送信するHTTPリクエストを作成する可能性があります。 – StuperUser

関連する問題