将所有文件请求路由到一个简单的文件夹名称以提供 PDF

Route all requests for files to a simple folder name for serving PDFs

我想为文件夹中的所有文件制作一个小 URL。所以不要写:

http://mywebsite.com/content/pdf/samples/Myfile.pdf

我会写:

http://MyWebsite.com/samples/myfile.pdf

我已经添加了

routes.MapPageRoute("Sample", "Sample/{*fullpath}", "~/Content/pdf/samples/{*fullpath}", False)

这似乎确实重定向了,但我得到 没有为扩展名“.pdf”注册的构建提供程序。但是,当我将 ASPX 文件放入文件夹并导航至该文件夹时,它工作正常。那么,我添加:

<add extension=".pdf" type="System.Web.Compilation.PageBuildProvider" />

这现在给我一个解析器错误,因为该页面充满了乱码。 图片也会发生同样的事情。

难道我问的不可行吗?似乎应该有一种方法让它理解服务或下载页面,就像没有路由一样。

有没有更好的方法?

好吧,我找到了一些有用的东西,尽管我不知道它有多有效或多棒。 我一直

routes.MapPageRoute("Sample", "Sample/{*fullpath}", "~/Content/pdf/samples/{*fullpath}", False)

然后我将以下内容添加到 Web.Config。

<system.webServer>

    <rewrite>
      <rules>           
        <rule name="Redirect PDFs" stopProcessing="true">
          <match url="^sample/?(.*)$" />
          <action type="Redirect" url="/Content/SampleReports/{R:1}" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>

</system.webServer>

我仍然很想知道是否有更好、更快或更简单的方法来做到这一点。此外,这适用于 PDF 文件。我假设我需要为示例目录中要提供的每种类型的静态文件制定规则。