IIS7 перехватывает мою страницу с ошибкой Coldfusion - PullRequest
8 голосов
/ 14 октября 2010

В моем файле обработки исключений я установил код состояния на 404, а затем отрисовал страницу HTML для страницы с ошибкой (например, сбойный кит).

<cfheader statuscode="404" statustext="Application Exception">

<html><head><title>Error</title></head><body><h1>There was an error yo!</h1></body></html>

Это явно упрощено, но просточтобы убедиться, что все было продемонстрировано.

Я обнаружил, что из запроса ASP.NET они могут установить переменную "Response.TrySkipIisCustomErrors = true", чтобы IIS не показывал свою страницу ошибки.

Как кто-то в Coldfusion может это сделать / как я могу просто сказать IIS остановить его, думая, что он знает лучше, чем мои махинации.

1 Ответ

21 голосов
/ 15 октября 2010

Это может помочь:

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

Для получения дополнительной информации:

Ошибки HTTP (IIS.NET)
Что делатьожидать от пользовательского модуля ошибок IIS7 (IIS.NET)

Если это не сработает, вы можете попробовать написать .NET HttpModule для подключения к конвейеру запросов / ответов IIS дляустановить Response.TrySkipCustomErrors.Не идеально.

Рабочий объект ASP.NET вызывает экспортированную функцию с именем MgdSetStatusW.Проблема здесь в том, что если Coldfusion не выставит этот флаг, вы не сможете установить значение непосредственно в CF.

Возиться с .NET Reflector Я видел, как ASP.NET устанавливал статус ответа с помощью:

[DllImport("webengine4.dll", CharSet=CharSet.Unicode)]
internal static extern int MgdSetStatusW(IntPtr pRequestContext, 
    int dwStatusCode, int dwSubStatusCode, string pszReason, 
    string pszErrorDescription, bool fTrySkipCustomErrors);
...