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

C# 为asp.net核心MVC应用程序设置默认页面,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我目前正在学习asp.net core,我想将登录页面设置为用户打开应用程序时看到的第一个页面,但前提是他们尚未登录,否则他们应该像往常一样看到索引页面 到目前为止,我发现通过更改Startup.cs中的方法Configure,特别是内部方法app.UseMvc,我可以得到我想要的,它看起来像这样 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}

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

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

app.UseMvc(routes =>
{
    routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
});
我知道,如果我修改属性“template”以查找登录控制器和操作,就可以完成这项工作。但问题是,我应用程序上的登录名是由框架标识类创建的,因此我无法引用控制器或操作,因为它们不存在,我拥有的是一个文件夹,其中包含由代码生成器构建的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语句放在其上重定向 您的仪表板屏幕

您确实有一个登录控制器,它只是在作为Identity framework一部分的DLL中编译的。您是否尝试过
模板:“{controller=Account}/{action=Login}/{id?}”)例如?您的意思是每个操作和页面都需要经过身份验证的用户吗?或者您只是希望默认路由指向登录屏幕?为什么您总是将用户发送到登录页面:如果用户已经登录了怎么办?您需要用
Authorize
属性修饰其他控制器,如果用户未登录,框架将把用户发送到登录页面。@DavidG我现在试过了,它不起作用。我不知道那个DDL,所以还是谢谢你。@KirkLarkin现在才读到你的问题,我理解了@CodingYoshi的意思,我在Home controller的索引操作中添加了
Authorize
属性,它会自动将用户发送到登录页面。谢谢你们两位。