Как MapPath в поставщике перезаписи IIS7?

Я использую отличный модуль IIS7 Rewrite (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 представляет собой собственный код, мне сложно понять, где я могу получить эту информацию).

Я действительно не хочу прибегать к созданию собственного модуля перезаписи, чтобы обойти эту проблему - у кого-нибудь есть подсказки для меня?

Спасибо! Отметка.


person Kram    schedule 05.08.2010    source источник


Ответы (1)


Вы не сможете получить к нему доступ с помощью этих API, поскольку код работает в другом домене приложения, отличном от того, который использует ASP.NET.

Единственный способ, который я могу придумать, - это передать правильную переменную сервера, которая включает физический путь к вашему расширению, и самостоятельно выполнить Path.Combine ().

Предположим, у вас есть расширение под названием YourProvider, которое вы вызываете примерно так: {YourProvder: {URL}}

Вы можете: {YourProvder: {APPL_PHYSICAL_PATH} | {URL}}

Теперь вы можете получить физический путь и URL-адрес, разделенные вертикальной чертой | , убедитесь, что вы передали физический путь первым, поскольку URL-адрес находится под контролем внешних пользователей, вы не хотите, чтобы они обманом заставили вас получить другой физический путь.

person Carlos Aguilar Mares    schedule 05.08.2010
comment
Спасибо - я только что потратил полдня на написание версии MapPath () для DirectoryEntry - ваше решение намного удобнее! Одна вещь, однако, переменная APPL_PHYSICAL_PATH не указывает, где в URL-адресе она начинается ... но переменная PATH_TRANSLATED действительно, похоже, напрямую отображается на физический путь в IIS 7.0 - person Kram; 06.08.2010