Iis 7 如何在IIS7重写提供程序中映射路径?

Iis 7 如何在IIS7重写提供程序中映射路径?,iis-7,rewrite,provider,mappath,Iis 7,Rewrite,Provider,Mappath,我正在使用相当优秀的IIS7重写模块(V2),并希望创建一个自定义重写提供程序,根据物理文件是否存在进行不同的重写 我已成功创建了一个提供程序,如本教程所示: 但是,我确实需要能够将url映射到物理路径——我通常会通过HttpContext.Current.Server.MapPath()或HostingEnvironment.MapPath()来实现这一点,但看起来HttpContext尚未初始化(至少在当前的应用程序域中-因为重写模块是本机代码,所以我很难确定在哪里可以获得这些信息) 我真

我正在使用相当优秀的IIS7重写模块(V2),并希望创建一个自定义重写提供程序,根据物理文件是否存在进行不同的重写

我已成功创建了一个提供程序,如本教程所示:

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

我真的不想求助于创建我自己的重写模块来解决这个问题——有人能给我一些线索吗

谢谢!
标记。

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

我认为实现这一点的唯一方法是将包含物理路径的正确服务器变量传递给扩展,然后自己执行path.Combine()

因此,假设您有一个名为YourProvider的分机,您是这样调用的: {YourProvder:{URL}}

你可以做: {YourProvder:{APPL_PHYSICAL_PATH}{124;{URL}}


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

谢谢-我刚刚花了半天时间编写了MapPath()的DirectoryEntry版本-您的解决方案更简洁!但有一件事,APPL_PHYSICAL_PATH变量没有指示它在URL中的起始位置…但PATH_转换的变量确实似乎直接映射到IIS 7.0中的物理路径