Как подключить MapPath в провайдере перезаписи IIS7? - PullRequest
0 голосов
/ 05 августа 2010

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

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

Спасибо! Mark.

1 Ответ

1 голос
/ 05 августа 2010

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

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

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

Вы можете сделать: {YourProvder: {APPL_PHYSICAL_PATH} | {URL}}

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

...