доступ к HttpContext. Запрос в конструкторе контроллера

Я следую этому учебному руководству MVC ASP.NET от Microsoft:

Мой код немного отличается, где я пытаюсь получить доступ HttpContext.Request.IsAuthenticated в конструкторе контроллера.

namespace SCE.Controllers.Application
{
    public abstract class ApplicationController : Controller
    {
        public ApplicationController()
        {
            bool usuario = HttpContext.Request.IsAuthenticated;
        }           
    }
}

Проблема - это HttpContext является всегда пустым.

Существует ли решение этого?

52
задан p.campbell 7 August 2010 в 15:37
поделиться

2 ответа

Контроллер инстанцируется значительно раньше, чем вызывается действие Index, и в момент построения HttpContext действительно недоступен. Что плохого в том, чтобы сослаться на него в методе контроллера Index?

9
ответ дан 7 November 2019 в 09:01
поделиться

instead of putting your HttpContext.Request.IsAuthenticated in Controller level you should put it in Controller Base class that will be inherited in all of your controller with an override method of OnActionExecuting() method.

В базе Controller у вас должно быть

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext ctx) {
        base.OnActionExecuting(ctx);
        ViewData["IsAuthenticated"] = HttpContext.Request.IsAuthenticated;
    }
}

и все ваши Controller должны наследовать класс BaseController

public class ApplicationController : BaseController

теперь вы должны получить ViewData["IsAuthenticated"] на вашей странице Master.

Edit

По ссылке, которую вы дали, и в связи с тем, что вы сделали, ваш ApplicationController является Page Controller, а не Base Controller. В примере ApplicationController является базовым контроллером, который наследуется HomeController, но вы сделали то, что вы поместили метод Action внутри вашего базового контроллера, который является ApplicationController, поэтому ваш метод Action Index не будет вызываться при вызове любой страницы (страницы Index), которая не из ApplicationController.

105
ответ дан 7 November 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: