【问题标题】:Redirect requests for static files in a local directory to MVC Action将对本地目录中的静态文件的请求重定向到 MVC 操作
【发布时间】:2015-09-15 01:31:50
【问题描述】:

问题是本地目录包含子目录,每个子目录都有多个 zip 文件。我们无法更改系统外部的链接,但现在必须将它们重新路由到 S3。该应用程序基于 ASP.NET MVC 5 构建。

建议的解决方案(我正在尝试): 捕获 /directory/subdirectory/xyz.zip 的所有入站请求并将它们重定向到 MVC 控制器操作,以便从 S3 向它们发送正确的文件。

结构:

root/DIRECTORY/*subdirectories/*.zip 

示例网址:

www.somewhere.com/Packages/{Guid}/{Guid}-IDENTIFIER.zip
  1. 添加了新的控制器包

  2. 添加了以下路线

routes.MapRoute(
               "RedirectDownloads",
                "{controller}/{key}/{zip}",
                new { controller = "Packages", action = "Index"},
                new
                {
                    key = @"[{|\(]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[\)|}]?",
                    zip = @"[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}\-.*\.zip"
                }
                );

由于这些是文件系统上的静态文件,这显然没有受到影响,所以我还在 .. 下尝试了以下操作。

<add name="Zips-ISAPI-Integrated-4.0" path="*.zip" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

但这会导致 IIS 抛出错误。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    在您的 web.config 中,找到 &lt;handlers/ &gt; 标签

    添加这个:

    <add name="zipThingy" path="*.zip" verb="GET" type="MikesProject.ZipThingy"/>  
    

    然后添加这个类:

    namespace MikesProject
    {
        public class ZipThingy: IHttpHandler, IReadOnlySessionState
        {
            public void ProcessRequest(HttpContext context)
            {
                var request = context.Request;
                var response = context.Response;
            }
        }
    }
    

    然后:
    1. 返回直接重定向到 S3 URL,如下所示:response.RedirectPermanent("http://S3.URL.ZIP");
    2. 您将逻辑放入 ProcessRequest 而不是控制器,控制器将从 S3 下载 zip 并返回文件,或者
    2. 让response 向您的控制器返回重定向,传递相关数据。您可以像这样获取文件名:Path.GetFileName(context.Request.PhysicalPath)

    【讨论】:

    • 谢谢罗伯。昨晚我的大脑没有工作,而这正是我让我走上正轨所需要的!
    • @Mike 不用担心,很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2014-07-12
    • 2017-07-15
    • 2015-04-01
    • 2017-01-24
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多