我目前正在学习asp.net核心,我想将登录页面设置为用户打开应用程序时看到的第一页,但前提是他们尚未登录,否则应该看到索引页面像往常一样。
到目前为止,我发现可以通过更改Startup.cs中的方法Configure
,特别是内部方法app.UseMvc
来获得所需的东西,
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我知道,如果我修改属性“模板”以查找“登录”控制器,则操作将完成该工作。但是问题是,我的应用程序上的登录名是由框架Identity类创建的,因此我无法引用控制器或操作,因为它们不存在,我所拥有的是一个包含Login.cshtml和Login文件的文件夹.cshtml.cs,由代码生成器提供支持。登录功能可以正常工作,但不适用于我想要的位置。
那么,即使它不是来自控制器的操作,也可以引用该登录名吗?
答案 0 :(得分:0)
我不知道这有多大帮助,但是您可以尝试一下
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class SessionTimeoutFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
ISession session = filterContext.HttpContext.Session;
if (session.GetString("UserID") == null)
{
var controller = filterContext.Controller as Controller;
controller.TempData.Add("Msg", "Redirection to Login Page, Reasons : Session Timeout or Unauthorized access");
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "Controller", "LogIn" },
{ "Action", "Index" }
});
}
else
{
//redirect to dashboard or other page as per your need
}
base.OnActionExecuting(filterContext);
}
}
这是一个自定义过滤器,您可以以此装饰您的登录控制器。 现在说明