如何在IIS7重写提供程序中MapPath?

时间:2010-08-05 13:53:19

标签: iis-7 rewrite provider mappath

我正在使用相当出色的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还没有初始化(至少在当前App域中 - 因为ReWrite模块是本机代码,我在找到可以获取此信息的地方时遇到困难)。

我真的不想借助于创建自己的重写模块来解决这个问题 - 任何人都有任何线索可供我使用?

谢谢! 标记

1 个答案:

答案 0 :(得分:1)

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

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

假设您有一个名为YourProvider的扩展程序,您正在调用这样的方式: 的 {YourProvder:{URL}}

你可以这样做: 的 {YourProvder:{APPL_PHYSICAL_PATH} | {URL}}

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