0

每当一个请求

http://localhost:9000/Content/PDF/ABC.pdf 

来(在 IIS 中),我希望 URL 重写模块来处理该请求并将其重定向到

http://localhost:9000/User/GetPdf

这样我的控制器和操作方法就会被调用,并且在向最终用户显示 pdf 文件之前执行我的代码。

这里 User 是 UserController 而 GetPdf 是我的应用程序中的 ActionMethod。

任何人都可以告诉我创建此 URL 重写的步骤。

提前致谢。

4

1 回答 1

3

我假设您使用的是 IIS 7.x 并且您已经安装了URL Rewrite 2.0 模块

在应用程序的web.config文件中,添加<rewrite>类似于以下内容的元素:

<system.webServer>
   <rewrite>
      <rules>
        <rule name="PDF Rewrite">
          <match url="Content/PDF/([\w-]+)\.pdf" />
          <action type="Rewrite" url="User/GetPdf/{R:1}" logRewrittenUrl="true" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

([\w-]+)部分url="Content/PDF/([\w-]+)**\.pdf"将“捕获”没有文件扩展名的 PDF 的名称(在您的示例中为“ ABC ”)。{R:1}部分<action type="Rewrite" url="User/GetPdf/{R:1}" logRewrittenUrl="true" />然后将插入捕获的字符串。最终结果是:

http://localhost:9000/Content/PDF/ABC.pdf 

变成:

http://localhost:9000/User/GetPDF/ABC 

我假设您需要将 PDF 的名称传递给您的 Action 方法,因此如果您实现标准路由模式{Controller}/{Action}/{id},那么id将设​​置为“ ABC ”。

我发现的对 URL Rewrite 模块的最佳介绍实际上是URL Rewrite 1.1 配置参考。尽管它适用于 v.1.1 而不是 2.0,但它提供了比v.2.0 配置参考更好的概述。从一开始就值得一读。特别是,必须理解“<em>从重写规则访问 URL 部分”部分。

要调试 URL 重写模块,您可以使用 IIS 7.x“失败请求跟踪”,与其名称相反,它可用于跟踪成功和失败的请求。这个www.iis.net 条目说明了如何配置它以及可用的详细调试信息的数量。

另请注意,该logRewrittenUrl="true"属性意味着重写的 URL 将记录到标准 IIS 日志而不是原始 URL。(它不能用于记录原始 URL 和重写 URL --- 你只能获取其中一个。)

于 2013-01-09T21:29:38.100 回答