Маршруты MVC 2.0, запрос перенаправления, игнорирование запроса - PullRequest
0 голосов
/ 31 августа 2010

IIS 7.5 MVC 2.0 ASP.NET 4.0

Если мой MVC-сайт получает внешний запрос для каких-либо несуществующих файлов, например, SomePage.aspx, есть ли способы перенаправить такой запрос на любой контроллер / действие.

Я использую elmah, и он выдает ошибки, когда такие запросы приходят.

Также я добавил routes.IgnoreRoute("SomePage.aspx") in global.asax.cs , чтобы игнорировать эти запросы так же, как я добавляю, чтобы игнорировать favicon.ico, но для SomaPage.aspx это не будет работать, в любом случае Elmah выдает ошибки.

Итак, есть три вопроса / решения, на которые я был бы рад получить ответы:

1) Как перенаправить этот запрос на существующий контроллер / действие

2) Как игнорировать такие запросы

3) Как отключить «Убедитесь, что файл существует» в IIS 7.5

Ответы [ 2 ]

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

Да, вы можете ,,, У меня есть контроллер ошибок для различных ошибок Handel.

В вашем web.config добавьте следующее, чтобы включить режим customErrors, и установите его для перенаправления на ваш контроллер при возникновении любых ошибок.

<system.web>
    <customErrors mode="On" defaultRedirect="/error/problem">
        <error statusCode="404" redirect="/error/notfound" />
        <error statusCode="500" redirect="/error/problem" /> 
    </customErrors>
</system.web>

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

и вот мой контроллер ошибок:

public class ErrorController : Controller
{

    public ActionResult NotFound()
    {
        ErrorViewModel model = BaseViewModelBuilder.CreateViewModel<ErrorViewModel>("We couldn't find what you were looking for");

        // Get the URL that caused the 404 error.
        model.ErrorUrl = Request.UrlReferrer;

        // Set the response status code to 404
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        Response.TrySkipIisCustomErrors = true; 

        return View(model);
    }

    public ActionResult Problem()
    {
        ErrorViewModel model = BaseViewModelBuilder.CreateViewModel<ErrorViewModel>("Well this is embarrassing...");

        return View(model);
    }

}

и, как вы можете догадаться, у меня есть представления Error.aspx, Problem.aspx в папке просмотра ошибок.

0 голосов
/ 31 августа 2010

Вы можете заставить Элму отфильтровать определенные типы исключений. Настройка игнорировать ошибки 404 - довольно распространенная практика:

http://code.google.com/p/elmah/wiki/ErrorFiltering

Extract:

<section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah" requirePermission="false" />

...

<elmah>
    <errorFilter>
        <test>
            <equal binding="HttpStatusCode" value="404" type="Int32" />
        </test>
    </errorFilter>
</elmah>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...