是否可以有 URL 的控制器/视图:
http://mydomain/SomeFolder/
和一个类似的物理文件夹来放置文件
http://mydomain/SomeFolder/*.*
当前 URL http://mydomain/SomeFolder/
,仅在 web.config 允许的情况下返回物理文件夹被浏览,但我希望它返回视图并http://mydomain/SomeFolder/*.*
返回文件夹中包含的文件。
是否可以有 URL 的控制器/视图:
http://mydomain/SomeFolder/
和一个类似的物理文件夹来放置文件
http://mydomain/SomeFolder/*.*
当前 URL http://mydomain/SomeFolder/
,仅在 web.config 允许的情况下返回物理文件夹被浏览,但我希望它返回视图并http://mydomain/SomeFolder/*.*
返回文件夹中包含的文件。
是的,这是可能的。假设您有~/SomeFolder/foo.png
文件和~/Controllers/SomeFolderController
. 您需要做的就是将该RouteExistingFiles
属性设置为 true:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.RouteExistingFiles = true;
}
现在,当您导航到/SomeFolder
或将呈现控制器/SomeFolder/Index
的Index
操作时。SomeFolder
当您导航到/SomeFolder/foo.png
静态文件时,将提供服务。
这是我找到的解决方案,但我希望我找到了一些更简单的方法。
使用此解决方案,我仍然无法将文件放在 的物理路径中http://mydomain/SomeFolder/
,该文件夹不能物理存在,否则控制器/视图将不起作用。但它将实现的是http://mydomain/SomeFolder/SomeFile.zip
返回与 相同的文件http://mydomain/**Content**/SomeFolder/SomeFile.zip
,这是我的主要目标。
我需要有两条不同的路线http://mydomain/SomeFolder/
和http://mydomain/SomeFolder/anything/file/etc
routes.MapRoute(
"SomeFolder",
"SomeFolder",
new { controller = "SomeFolder", action = "Index" }
);
routes.MapRoute(
"SomeFolderSub",
"SomeFolder/{*any}",
new { controller = "TryDownloadFile", action = "Index" }
);
routes.RouteExistingFiles
仍然false
。
然后我有SomeFolderController
返回 SomeFolder 的视图。并TryDownloadFileController
检查文件是否存在http://mydomain/Content/SomeFolder/
而不是http://mydomain/SomeFolder/
并返回它。
(我猜如果文件不存在,它应该返回一些 404 响应。这将是return this.HttpNotFound();
)