Когда можно вмешиваться в жизненный цикл страницы на странице ASP.NET MVC? - PullRequest
0 голосов
/ 30 июля 2010

Кажется, что ASP.NET MVC просто работает поверх ASP.NET WebForms.System.Web.Mvc.ViewPage в ASP.NET MVC наследуется от System.Web.UI.Page, который включает в себя методы жизненного цикла страницы, такие как OnRender и друзья.

Я видел несколько комментариев по всему Интернету по поводу эффектачто вы должны противостоять желанию переопределить эти методы ВСЕ СТОИМОСТЬ !.Конечно, это означает, что я обнаружил, что сопротивляюсь побуждению сделать именно это.

Неужели так много неправильного в следующем:

public class SslPage : ViewPage
{
    protected override void OnPreInit(EventArgs e)
    {
        // Make sure we are using SSL
        string url = HttpContext.Current.Request.Url.ToString();

        if(url.StartsWith("http:"))
        {
            HttpContext.Current.Response.Redirect("https" + url.Remove(0, 4),false);
        }

        // Back to our regularly scheduled programming...
        base.OnPreInit(e);
    }
}

Можно спорить о чистотепомещая это в «представление», но это кажется вполне целесообразным.

Насколько опасно / кощунственно игнорировать эти методы?Когда это может иметь смысл?

1 Ответ

3 голосов
/ 30 июля 2010

Проблема с тем, что вы описываете, заключается в том, что представление отображается только после того, как контроллер решит , какое представление будет отображено. Поначалу это может показаться удивительным, но к тому времени, когда вызывается ваш метод OnPreInit, вся логика контроллера уже уже выполнена.

Правильное место для этого, как говорит @Ryan, находится в фильтре или базовом контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...