I'm following this ASP.NET MVC tutorial from Microsoft:
My code is slightly different, where I'm trying to access HttpContext.Request.IsAuthenticated
in the controller's constructor.
namespace SCE.Controllers.Application
{
public abstract class ApplicationController : Controller
{
public ApplicationController()
{
bool usuario = HttpContext.Request.IsAuthenticated;
}
}
}
The problem is that HttpContext
is always null.
Is there a solution to this?
The Controller is instantiated significantly prior to the point where the Index action is invoked, and at the moment of construction HttpContext is indeed unavailable. What's wrong with referencing it in your controller method
Index
?The solution of this problem is to create an override method of Initialize by passing RequestContext object.
I would suggest you use:
Just remember
System.Web.HttpContext.Current
is threadstatic, but if you don't use additional thread the solution works.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.In your Controller base you should have
and all your Controller should inherit the BaseController class
now you should get the
ViewData["IsAuthenticated"]
in your Master page.Edit
With the link you have given, and relating to what you have done, your
ApplicationController
is a Page Controller, not a Base Controller. In the example,ApplicationController
is a Base Controller that is inherited by theHomeController
but what you have done is you are placing the Action method inside your base controller which is theApplicationController
so your Action Index method will not be invoked when you call any page (Index page) that is not from the ApplicationController.