我在 MVC 5 中构建了一个 Controller 来处理受登录保护的文件下载。 Controller 在没有 pdf 扩展名的情况下工作正常,即/media/1001/secretpdffile 之类的路径仅在用户登录时才会在 App_Data/media/1001/secretpdffile.pdf 下载文件。
我想在路径上添加 pdf 扩展名,但是一旦我添加它(当然也删除了我在 Controller 中添加的 pdf),我就收到了 404 错误。
这是我的路线
routes.MapRoute(
name: "Media",
url: "media/{mediaid}/{filename}",
defaults: new { controller = "Media", action = "Get" }
);
我已经看到很多地方试图通过
最佳答案
这是 IIS 的正常行为,称为 request filtering . 基本上它不会向 ASP.MVC 发送请求,如果有一个点,因为它会认为你想要一个文件,所以它会在服务器上寻找文件并返回 404 错误,因为它找不到它。
您可以在这里找到一些解决方案:https://stackoverflow.com/a/12151501/1681023
或者您可以在 IIS 上编辑您的配置,禁用第一个链接显示的功能。
或者您可以通过替换为 %2E
来转义您的点,这可能是最简单的方法。
附带说明一下,禁用请求过滤功能时要小心,显然,如果您为 https://stackoverflow.com/media/*
禁用它,您将无法访问任何来自 http 请求的名为 media
的文件夹中的资源,因此,如果您想在您的网站上使用一些图像、css 或 js,请不要为您的所有应用程序或服务器禁用它。
关于c# - ASP.NET MVC Controller 处理文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27987546/