我通过jquery调用一个动作方法并试图删除一个文件。但没有任何反应。该文件仍然存在。
以下是jquery Code
$("#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.
});
});
以下是操作方法代码
[HttpPost]
public ActionResult Remove(string fileName)
{
string completFileName = Server.MapPath("~/Content/Images/" + fileName);
System.IO.File.Delete(completFileName);
return Json(true);
}
答案 0 :(得分:6)
在这一行:
data: { fileName: $('#pictureTitle').attr('src') }
您似乎将fileName参数从某个图像的src参数传递给控制器操作。所以我想你有这样的形象:
<img id="pictureTitle" src="/Content/images/foo.jpg" />
所以你传递/Content/images/foo.jpg
所以在你的控制器操作中,你试图删除被转换为Server.MapPath("~/Content/Images//Content/images/foo.jpg")
的{{1}},这个c:\wwwroot\Content\Images\Content\images\foo.jpg
不太可能存在并抛出异常。
只需在控制器操作中添加断点并检查不同的参数。
这就是说,暴露一个带有文件名并删除服务器上文件的控制器操作是你应用程序中的一个巨大安全漏洞。