Служба перезаписи URL-адреса IIS 1.svc в api

#url-rewriting #biztalk #iis-10

Вопрос:

Я пытаюсь использовать перезапись URL-адреса IIS для перезаписи:

http://localhost/RESTDemo/Service1.svc/Persons Для http://localhost/RESTDemo/api/Persons

У меня есть следующая конфигурация в моем Web.config:

 <system.webServer>
    <rewrite>
        <rules>
            <rule name="Change 'Service1.svc' to 'api'" stopProcessing="true">
                <match url="^(.*)/RESTDemo/api/(.*)$" />
                <action type="Rewrite" url="{R:1}/RESTDemo/Service1.svc/{R:2}" logRewrittenUrl="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
 

И когда я запускаю тестовый шаблон в IIS, он, кажется, работает
Тестовый шаблон в IIS

Но когда я тестирую СООБЩЕНИЕ http://localhost/RESTDemo/api/Persons , я получаю 404.0, не найденное в IIS. Затем, когда я пытаюсь запустить тот же ПОСТ, http://localhost/RESTDemo/Service1.svc/Persons он работает.

Я попытался проверить журнал в разделе C:inetpublogsLogFilesW3SVC1 , но не вижу ничего полезного, хотя я установил logRewrittenUrl="true" , что могу видеть это только в своем журнале IIS:

 2021-04-20 10:18:48 127.0.0.1 POST /RESTDemo/api/persons - 80 - 127.0.0.1 Apache-HttpClient/4.5.5 (Java/12.0.1) - 404 0 2 1
 

Мои вопросы таковы..

  1. Что я делаю не так?
  2. Почему я не могу увидеть переписанный URL-адрес в своем файле журнала?

Комментарии:

1. Начните с ошибки 1 blog.lextudio.com/…

Ответ №1:

Это связано с тем, что есть проблема с вашими правилами перезаписи, вы можете попробовать следующие правила перезаписи:

 <system.webServer>
    <rewrite>
        <rules>
            <rule name="Change 'Service1.svc' to 'api'" stopProcessing="true">
                <match url="^(RESTDemo)/api/(.*)$" />
                <action type="Rewrite" url="RESTDemo/Service1.svc/{R:2}" logRewrittenUrl="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
 

Вот моя демо-версия:

введите описание изображения здесь