我的MVC网站中有一个页面,用于浏览服务器上的文件夹结构,但通配符映射不适用于文档。
映射适用于文件夹名称,例如
http://localhost:4321/Document/Folder/General_HR
映射到控制器中的T:\root\General_HR
等共享驱动器文件夹。
但是我得到了404并且在尝试访问文件时没有触及控制器方法,例如
http://localhost:4321/Document/Folder/General_HR/Fire_Drill_Procedures.doc
这是路线映射
routes.MapRoute("Document Folder",
"Document/Folder/{*folderPath}",
new { controller = "Document", action = "Folder" });
我也有上面的标准MVC路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我尝试评论所有其他路线,但它仍然无法正常工作。
我曾经让它工作过一段时间,但我不知道从那以后发生了什么变化。它似乎正在寻找位于C:\MyProject\General_HR
的资源,而不是被路由到控制器。如何修复映射以解决此问题?根据{{3}}它应该有效。
我的控制器方法是这样的:如果URL参数包含扩展名,那么我return File(filePath)
,否则我创建一个视图模型并返回View(viewModel)
。因此,当我点击带有扩展名的内容时,它仍应指向同一控制器方法并返回文件。
public virtual ActionResult Folder(string folderPath)
{
var actualFolderPath = folderPath;
if (string.IsNullOrEmpty(actualFolderPath))
{
actualFolderPath = DocumentPathHelper.RootFolder;
}
else
{
actualFolderPath = DocumentPathHelper.GetActualFileLocation(actualFolderPath);
}
if (System.IO.File.Exists(actualFolderPath))
{
return File(actualFolderPath, MimeMapping.GetMimeMapping(actualFolderPath));
}
var vm = new FolderViewModel();
//build vm
return View(vm);
}
答案 0 :(得分:0)
我通过用占位符替换.
,然后将其替换回控制器中来改变我对文档的URL来解决这个问题。
每个项目:
folderPath = folderPath.Replace(".", "___");
然后在控制器中:
public virtual ActionResult Folder(string folderPath)
{
var actualFolderPath = folderPath.Replace("___", ".");