0

是否可以有 URL 的控制器/视图:

http://mydomain/SomeFolder/

和一个类似的物理文件夹来放置文件

http://mydomain/SomeFolder/*.*

当前 URL http://mydomain/SomeFolder/,仅在 web.config 允许的情况下返回物理文件夹被浏览,但我希望它返回视图并http://mydomain/SomeFolder/*.*返回文件夹中包含的文件。

4

2 回答 2

1

是的,这是可能的。假设您有~/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/IndexIndex操作时。SomeFolder当您导航到/SomeFolder/foo.png静态文件时,将提供服务。

于 2013-07-15T08:59:42.570 回答
0

这是我找到的解决方案,但我希望我找到了一些更简单的方法。

使用此解决方案,我仍然无法将文件放在 的物理路径中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();

于 2013-07-31T11:51:06.223 回答