0

我正在使用相当出色的 IIS7 重写模块 (V2),并希望创建一个自定义的 RewriteProvider,它会根据物理文件是否存在而进行不同的重写。

我已经成功创建了一个提供程序,如本教程所示: http ://learn.iis.net/page.aspx/804/developing-a-custom-rewrite-provider-for-url-rewrite-module/

但是,确实需要能够将 url 映射到物理路径 - 我通常会通过 HttpContext.Current.Server.MapPath() 或 HostingEnvironment.MapPath() 执行此操作,但看起来 HttpContext 尚未初始化(在至少在当前的应用程序域中 - 因为 ReWrite 模块是本机代码,所以我很难确定在哪里可以获得这些信息)。

我真的不想求助于创建自己的重写模块来解决这个问题 - 有人对我有任何线索吗?

谢谢!标记。

4

1 回答 1

1

您将无法使用这些 API 访问它,因为代码运行在与 ASP.NET 使用的不同的 AppDomain 中。

我能想到的唯一方法是将包含物理路径的正确服务器变量传递给您的扩展并自己执行 Path.Combine() 。

因此,假设您有一个名为 YourProvider 的扩展程序,您正在以某种方式调用它: {YourProvder:{URL}}

你可以这样做: {Yo​​urProvder:{APPL_PHYSICAL_PATH}|{URL}}

您现在可以获取物理路径和由管道分隔的 URL | ,请确保首先传递物理路径,因为 URL 受外部用户的控制,您不希望他们欺骗您获取不同的物理路径。

于 2010-08-05T19:14:29.073 回答