ASP MVC 4不处理静态文件

时间:2013-04-09 13:48:37

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我在我的ASP MVC 4应用程序中放了一个名为“Protected”的子目录,我在该目录中删除了一个简单的test.html文件,但我不能为我的生活弄清楚如何获取我的自定义全局AuthorizeAttribute类在我的浏览器中查看test.html文件时触发。

我在集成模式下使用IIS Express,所以我认为这样可行。我甚至尝试在集成模式下使用IIS 7,但它仍然不适用于我。

但也许我说的都是错的。也许这是我的一些误解。

基本上,我需要以编程方式授权对该文件夹中的静态文件的请求。还有另一种方法吗?

AD于2013年4月9日上午10:07:25更新:Zidad在下面的回答让事情朝着正确的方向发展,但我现在无法获得配置路线。这是我所拥有的,但文件仍在直接提供,而不是点击Home / File操作。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute("NotFound", "protected/test.html", new { controller = "Home", action = "File" });

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

AD于2013年4月9日上午10:20:54更新:Ohhhhhhhhhhhhhhhhhhh,现在我明白了!绝对是我的误解。猜猜我还有一些东西需要学习。 :)

1 个答案:

答案 0 :(得分:3)

首先确保添加到web.config以确保IIS在提供静态文件时不会绕过.NET:

<system.webServer>
...
    <modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>

然后您应该能够将web.config文件添加到包含以下内容的受保护文件夹中

<authorization>
  <deny users="?" />
</authorization>

如果您确实想使用'AuthorizeAttribute',您可以将路由映射到控制器操作,返回受保护文件夹中的文件,并将该属性应用于该方法,如下所示:

Can an ASP.NET MVC controller return an Image?

更新:要保护受保护文件的URL,您可以像这样配置路由:

routes.MapRoute(
                name: "ProtectedFile", 
                url: "protected/{name}", 
                defaults: new { controller = "Home", action = "File", name = "index.html" });

然后写下你的动作:

public ActionResult File(string name){
// return file
}

Behold :通过.NET提供所有静态文件会降低性能,此操作不会考虑IIS在提供静态文件时会自动为您执行的所有HTTP最佳做法,例如静态内容压缩,返回“未修改(304)”HTTP状态,添加ETAG等