如何将文件路径作为参数传递给MVC Action

时间:2015-06-07 20:04:49

标签: c# routes

我有一个路由和Controller和Action组合,通过javascript成功将字符串传递给Action。如果我尝试传递文件名,例如test.png动作没有被击中。

每当传递文件名/路径时,系统都会尝试打开/下载文件 - 这是有意义的。

谷歌搜索建议编辑web.config文件 - 如StackOverflow问题所示:MVC route to capture file name as a parameter

我不确定这是最好的解决方案 - 它不会影响您可能拥有的任何文件的实际链接 - 或者它是否足够智能以了解您的需求?

我试图创建一个解决方案,我替换了。在test.png到<<dot>>所以我会通过test<<dot>>png - 这仍然没有达到我的行动。所以我想我会尝试使用Javascript encodeURIComponent()对字符串进行编码,但仍然没有触及我的操作 - 不确定原因 - 所有代码都在下面 - 请有人指出我出错的地方 - 或者说我还在考虑使用上面链接的解决方案。

使用Javascript:

$('#imageSelect').on('click', function () {
//pass selected image data to ActionResult function to process and create a div for
//unable to pass file name as it tries to open the file - so replace "." with "<<dot>>" and undo in the Action
var imagePathLocal = $('#tbImagePathLocal').val().replace(".", "<<dot>>");
var encodedImagePathLocal = encodeURIComponent(imagePathLocal);
$.ajax({
       async: false,
       url: '/Products/FilePath/CreateNewImage/' + encodedImagePathLocal
}).success(function (partialView) {
       $('#newImages').append(partialView);
   });
});

动作:

public ActionResult CreateNewImage(string filePath)
{
        //here I was going to unencode then
        //replace the "<<dot>>" with "."
        filePath = filePath.Replace("<<dot>>", ".");
}

路线:

routes.MapRoute(
    name: "FilePathRoute",
    url: "{controller}/FilePath/{action}/{*filePath}",
    defaults: new { controller = "Home", action = "Index", filePath = UrlParameter.Optional }
);

重申 - 如果参数是一个字符串,上面的代码将正常工作,例如'test'但是只要我添加文件扩展名'test.png'就会失败。

0 个答案:

没有答案