0

我有一个使用 ASP.NET MVC 2 框架的 ASP.NET webapp。它允许用户将文件上传到上传文件夹。当 Web 浏览器访问子文件夹中的图像时会出现此问题:

http://mywebapp/uploads/image_gallery/sub_folder/image.jpg

uploads 文件夹是静态的,用户不能修改,但它下面的任何内容都是可修改的。

在上面的示例中,image_gallery 文件夹被锁定,因为 w3wp.exe 似乎在 sub_folder 目录上创建了一个句柄(使用 sysinternals 的进程资源管理器)。我仍然可以重命名 sub_folder 目录,并且在重命名后句柄似乎仍然存在,但我无法重命名父文件夹(在这种情况下为 image_gallery)。

我仍然可以在文件夹中浏览并查看其他图像和文件等。但无法重命名父文件夹。

由于这是使用 MVC 2 框架,我已经为上传文件夹添加了一个排除项,如下所示:

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

进入 global.asax,所以我假设 ASP.NET 直接提供这些图像(在 MVC 框架之外)

所以我想我的问题是,有没有办法阻止 IIS 将句柄放在特定目录上或强制它删除句柄?即使我指定了 ignoreroute,MVC 2 框架是否在做一些棘手的事情?

提前感谢您的任何提示!

4

2 回答 2

2

我遇到了同样的问题,经过大量调查,我找到了罪魁祸首:

网页配置

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

将此选项(这使得所有 http 模块在所有文件上运行,包括静态文件)设置为false为我修复了它。

于 2015-05-09T12:26:52.050 回答
0

我相信,目录句柄是在工作处理器中创建的,因为 ASP.NET 通常会监视文件系统的更改——这允许它响应配置文件、新 dll 等的更改/添加。

我建议您摆脱用户可以控制 Web 服务器上的物理目录结构的概念。通常,用户可以创建的是逻辑目录结构,但物理结构将由您的程序逻辑控制。您的逻辑将存储用户创建的逻辑结构及其与 Web 服务器上实际物理结构的映射。

于 2011-06-23T04:28:21.477 回答