URL 授权仅适用于 Asp.Net 相关文件类型?1 但为什么不能也适用于非 Asp.Net 文件类型?
谢谢
URL 授权仅适用于 Asp.Net 相关文件类型?1 但为什么不能也适用于非 Asp.Net 文件类型?
谢谢
这是因为 ASP.NET 的脚本映射。只有某些扩展被映射到 ASP.NET。其余的由 IIS 直接处理。出于性能原因,这是设计使然。
有两种方法可以处理这个问题。
在 NTFS 文件 ACL 的 web.config 文件中复制您的授权规则(即直接设置文件夹和文件的权限)。确保用户的身份验证方案与用于控制访问的帐户和组匹配...换句话说,如果您使用 SQL 存储用户名令牌,这将不起作用,因为这些令牌不一定会映射回域用户和组/角色。
创建一个IHttpHandler来提供非 ASP.NET 文件。从该方法中,在传入 URL 上ProcessRequest
调用该方法,然后使用. 您可能需要先设置 ContentType 属性。而且,(这里有个坏消息),您可能仍需要执行声明性或命令式访问检查——仅在 web.config 文件中添加条目可能不起作用。有关编写您自己的处理程序的更多信息,请参阅使用 HTTP 进行自定义 ASP.NET 处理。为每种内容类型制作单独的处理程序可能是个好主意。一旦你写了一个,你就会看到它们是多么容易制作。Server.MapPath(url)
Response.WriteFile(filename)
您可以尝试(我自己没有尝试过)将 <httpHandlers> 元素添加到您有其他 <authorization> 元素的 web.config 文件中 - 使用 <remove> 元素删除继承的 HttpHandler 并在子文件夹中添加另一个水平(也许指向同一个班级?)。我不确定这会奏效,但值得一试。
最后,如果您真的不想完成所有这些工作,您可以简单地在 IIS 中添加更多扩展映射。例如,查看如何:注册 HTTP 处理程序,您可以将 .jpg 文件的映射添加到 aspnet_isapi.dll(查看现有的 .aspx 映射等)。您不需要在 web.config 中添加 HttpHandler 元素,因为机器级别的 web.config 已经包含以下条目:
<add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>
请注意,这可能会给您的网站带来非常严重的性能问题。