Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果用户未登录MVC,自定义登录页将覆盖返回URL_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 如果用户未登录MVC,自定义登录页将覆盖返回URL

C# 如果用户未登录MVC,自定义登录页将覆盖返回URL,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个基于角色的自定义登陆 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } var theLoggedInEmail = model.Email; var

我有一个基于角色的自定义登陆

    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var theLoggedInEmail = model.Email;
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

        switch (result)
        {
            case SignInStatus.Success:
                var user = await UserManager.FindAsync(model.Email, model.Password);
                var roles = await UserManager.GetRolesAsync(user.Id);
                if (roles.Contains("user"))
                {
                    return RedirectToAction("Index", "Custom_dashboard", routeValues: new { id = User.Identity.GetUserId() });
                    //Send a mail to user to notify them of logging in
                }
                if (roles.Contains("Admin"))
                {
                    return RedirectToAction("Index", "Admin_dashboard", routeValues: new { id = User.Identity.GetUserId() });
                }
                else
                {
                    return RedirectToLocal(returnUrl);
                }
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt. Please try again with correct email and password");
                return View(model);
        }           
    }
公共异步任务登录(LoginViewModel模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
var theLoggedInEmail=model.Email;
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
var user=await UserManager.FindAsync(model.Email,model.Password);
var roles=await UserManager.GetRolesAsync(user.Id);
if(roles.Contains(“用户”))
{
返回RedirectToAction(“Index”,“Custom_dashboard”,routeValue:new{id=User.Identity.GetUserId()});
//向用户发送邮件,通知他们登录
}
if(roles.Contains(“Admin”))
{
返回RedirectToAction(“Index”,“Admin_dashboard”,routeValue:new{id=User.Identity.GetUserId()});
}
其他的
{
返回重定向到本地(returnUrl);
}
案例标志状态锁定输出:
返回视图(“锁定”);
案例标志状态。要求验证:
return RedirectToAction(“SendCode”,new{ReturnUrl=ReturnUrl,RememberMe=model.RememberMe});
案例信号状态故障:
违约:
ModelState.AddModelError(“,”登录尝试无效。请使用正确的电子邮件和密码重试”);
返回视图(模型);
}           
}
以及另一个模块,用于在用户登录时显示一些信息

查看页面

    @if ( (User.Identity.IsAuthenticated) && (User.IsInRole("Employer")) ) {
        [Information to be displayed...]
    }
    @if (User.Identity.IsAuthenticated == false)
    {
       <h4 class="text-center">
           @Html.ActionLink("Login", "Login", "Account", new { @returnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null)
       </h4>
    }
@if((User.Identity.IsAuthenticated)和&(User.IsInRole(“雇主”)){
[要显示的信息…]
}
@if(User.Identity.IsAuthenticated==false)
{
@ActionLink(“登录”、“登录”、“帐户”,新建{@returnUrl=ViewContext.HttpContext.Request.Url.PathAndQuery},null)
}
如果用户未登录,系统将用户重定向到登录页面并验证该用户。如果成功,系统将显示视图,但会显示自定义登录页面


如果
returnURL
设置为您不想遵守的
returnURL
,请将您的
Login
路由更改为重定向到
Login
路由(不带查询字符串),如何使其工作


然后,
returnURL
将被清除,它应该按照您想要的方式工作

寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整且可验证的示例。@DaImTo如果用户已登录,则在显示信息时可以正常工作,但如果用户未登录,则系统会将用户重定向到登录页面,登录后会显示自定义登录页,但我希望视图中显示的信息不是自定义登录页page@mjwills对只是为了看information@mjwills
http://localhost:44257/Account/Login?ReturnUrl=%2FUser%2FDetails%2F61eb36a6-f083-4565-a9cc-b175838b0847
@mjwills非常感谢。我所做的是检查returnURL!=在检查角色的if条件内为null并返回RedirectToLocal(returnUrl)