Назад | Перейти на главную страницу

Как настроить IIS для доставки статического ресурса с пользовательским кодом ошибки?

У меня есть IIS 8.5, на котором запущена служба WCF RESTful ASP.NET 4.5 как приложение на Windows Server 2012 R2.

Во время обслуживания службы мне нужны все запросы к службе WCF (https: //server/path/service.svc/whatever/path), чтобы получить пользовательский код ошибки (например, 555) и статический ответ JSON (статическое содержимое и правильный Тип содержимого заголовок). Поскольку должно быть некоторое автоматически запускаемое обслуживание, было бы замечательно, если бы это поведение IIS могло запускаться программно.

Знаете ли вы, есть ли способ временно доставить статический контент JSON для определенного URL-адреса (и всех REST-файлов? подпутисм. пример URL-адреса выше) и дополнительно использовать пользовательский код ошибки 5xx (вместо 200) в качестве кода ответа HTTP?

Вы задаете два вопроса: как это сделать и как написать сценарий того, что вы хотите сделать.

Я не знаю, возможно ли это из коробки, но одно решение - использовать Модуль IIS UrlRewrite, это очень удобно для самых разных вещей, поэтому я думаю, что в любом случае это хорошая идея.

Создайте новое правило, которое соответствует всем запросам, которые вы хотите обрабатывать, в вашем случае. path/service.svc/whatever/path, вы можете использовать регулярные выражения для соответствия вашим запросам. Используйте собственный ответ и отправьте собственный код состояния. В web.config у вас должен быть такой раздел:

<rewrite>
  <rules>
    <rule name="Json Redirect" stopProcessing="true">
      <match url="path/service.svc/whatever/path" />
      <action type="CustomResponse" statusCode="555" subStatusCode="0" statusReason="Nothing to see here" statusDescription="Temporary static json..." />
    </rule>
  </rules>
</rewrite>

Если вы просто сделаете это, вы получите код ошибки, но не свой статический json. Добавьте новую запись в system.webServer-httpErrors в web.config:

<error statusCode="555" subStatusCode="0" path="temp.json" responseMode="File" />

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

Теперь вам нужно исправить тип контента, добавить запись в system.webServer-staticContent в свой web.config:

<mimeMap fileExtension=".json" mimeType="text/json" />

При локальном тестировании вы все равно можете получить страницу с ошибкой IIS, но при удаленном вызове она должна работать.

Вы можете вносить все эти изменения в пользовательском интерфейсе диспетчера IIS, но если вы хотите внести их в сценарий, загляните в Командлеты PowerShell IIS.