gpt4 book ai didi

asp.net-mvc - ASP MVC 4 不处理静态文件

转载 作者:行者123 更新时间:2023-12-04 05:02:54 25 4
gpt4 key购买 nike

我在我的 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 });

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

最佳答案

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

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

那么您应该能够将 web.config 文件添加到您的 protected 文件夹中,其中包含:
<authorization>
<deny users="?" />
</authorization>

如果您确实想使用“AuthorizeAttribute”,则可以将路由映射到 Controller 操作,返回 protected 文件夹中的文件,并将该属性应用于该方法,如下所示:

Can an ASP.NET MVC controller return an Image?

更新:要使 protected 文件的 URL 保持相同,您可以像这样配置路由:
routes.MapRoute(
name: "ProtectedFile",
url: "protected/{name}",
defaults: new { controller = "Home", action = "File", name = "index.html" });

然后像这样写你的 Action :
public ActionResult File(string name){
// return file
}

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

关于asp.net-mvc - ASP MVC 4 不处理静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com