首页 > 解决方案 > 为 asp.net core MVC 应用程序设置默认页面

问题描述

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

到目前为止,我发现我可以通过更改ConfigureStartup.cs 中的方法得到我想要的,特别是内部方法app.UseMvc,它看起来像这样

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

我知道如果我修改属性“模板”以查找登录控制器和操作将完成这项工作。但问题是,我的应用程序上的登录是由框架身份类创建的,因此我无法引用控制器或动作,因为它们不存在,我拥有的是一个包含文件 Login.cshtml 和 Login 的文件夹.cshtml.cs,由代码生成器搭建。登录功能工作得很好,但不是我想要的。

那么有没有办法引用登录,即使它不是来自控制器的操作?

标签: c#asp.net-coreasp.net-core-mvc

解决方案


我不知道这会有多大帮助,但你可以试试这个

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

这是一个自定义过滤器,你可以用它来装饰你的登录控制器。现在解释

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

推荐阅读