IIS переопределяет пользовательскую страницу ошибки 404 в ASP.NET - PullRequest
3 голосов
/ 19 февраля 2011

Я пытаюсь создать страницу с ошибкой 404, и в настоящее время у меня есть все следующее / пробовал все следующее, чтобы попытаться выполнить это. Когда пользователь вводит:

http://name/something.aspx

Это работает так, как и должно. Но если пользователь вводит:

http://name/NotAFile

без .aspx, тогда IIS7 берет дело в свои руки, и я получаю прекрасную страницу с ошибкой, с которой идет IIS7. Цель состоит в том, чтобы сайт перенаправлял только с кодом статуса 404 (то есть не перенаправление 200 или 302). Я пробовал в обоих веб-конфигурации с:

<customErrors mode="On" defaultRedirect="~/error/Default.aspx redirectMode="ResponseRewrite">
     <error statusCode="404" redirect="~/error/NotFound.aspx" />
</customErrors>

Это работает для URL с расширением .aspx, но не без расширения. То же самое с таким подходом в global.asax

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;

    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/error/NotFound.aspx");
        }

        Server.Transfer("~/error/Default.aspx");
    }
}

Для этого имеются те же результаты :( Моя последняя попытка была применить это к веб-конфигурации:

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

С этим я получаю простой белый экран, на котором ничего нет ... Любые мысли или комментарии будут с благодарностью! Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 18 апреля 2012

Следующие коды работают как с ASPX, так и с другими типами файлов:

Global.asax

void Application_Error(object sender, EventArgs e)
{
    var serverError = Server.GetLastError() as HttpException;
    if (serverError != null)
    {
        if (serverError.GetHttpCode() == 404)
        {
            Server.ClearError();
            Response.Redirect("~/NotFound.aspx?URL=" + Request.Url.ToString());
        }
        Response.Redirect("~/Default.aspx");
    }
}

Web.config

<system.webServer>
    <httpErrors existingResponse="PassThrough" />
</system.webServer>
3 голосов
/ 19 февраля 2011

Похоже, что ваше приложение работает в классическом конвейерном режиме. Измените его на интегрированный, и ваша проблема будет исправлена. Вот статья о режимах конвейера и их отличиях - http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-7-integrated-pipeline/

0 голосов
/ 09 мая 2013
<system.webServer >
    <httpErrors errorMode="Custom">
      <remove statusCode="404" subStatusCode="-1" />
       <error statusCode="404" path="http://www.seair.co.in/Page-not-found.aspx" responseMode="Redirect" />
    </httpErrors>
</system.webServer>

используйте код в вашей конфигурации и укажите полный путь к странице ошибки

0 голосов
/ 18 января 2012

Для классического осина вы можете использовать это

<system.webServer>
    <httpErrors>
      <clear />
      <error statusCode="404" subStatusCode="-1" path="/404.html" responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>
...