繁体   English   中英

设置asp.net核心MVC应用程序的默认页面

[英]Setting default page for asp.net core MVC application

我目前正在学习asp.net core,我想将登录页面设置为用户打开应用程序时看到的第一页,但前提是他们尚未登录,否则他们应该照常查看索引页面。

到目前为止,我发现可以通过更改Startup.cs中的Configure方法(特别是内部方法app.UseMvc ,如下所示

app.UseMvc(routes =>
{
    routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
});

我知道,如果修改属性“模板”以查找“登录”控制器,则操作将完成该工作。 但是问题是,我的应用程序上的登录名是由框架Identity类创建的,因此我无法引用控制器或操作,因为它们不存在,我所拥有的是一个包含Login.cshtml和Login文件的文件夹.cshtml.cs,由代码生成器提供支持。 登录功能可以正常工作,但不适用于我想要的位置。

那么,即使它不是来自控制器的操作,也有什么方法可以引用该登录名吗?

我不知道这有多大帮助,但是您可以尝试一下

[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);
    }
}

这是一个自定义过滤器,您可以以此来装饰登录控制器。 现在说明

  • 它将检查会话值,这里是UserID,您可以在此处使用会话密钥,如果会话不存在,它将重定向到登录页面
  • 但是,如果存在会话,则可以在仪表板屏幕上放置else语句来重定向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM