C# ASP.NET标识-未授权页面

C# ASP.NET标识-未授权页面,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我试图插入AccountController中的默认switch语句,并将用户重定向到“未授权”页面(如果他们不在管理员角色中) 默认代码 // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelS

我试图插入AccountController中的默认switch语句,并将用户重定向到“未授权”页面(如果他们不在管理员角色中)

默认代码

// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl });
        case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
    }
}
如果我从帐户/登录开始,这一切都很好,但是如果我的URL附加了一个ReturnURL,我无法让它重定向到未授权的页面

例如,我有一个像这样的管理控制器

[Authorize(Roles = "Admin")]
public class AdminController : Controller
{
    // GET: Admin
    public ActionResult Index()
    {
        return View();
    }
}
如果我尝试直接转到该管理员页面,在未登录时,我的页面将重定向到Account/Login,URL将如下所示http://localhost:51250/Account/Login?ReturnUrl=%2FAdmin 这就是在登录过程中重定向到NotAuthorized将不起作用的地方。如果我的URL看起来像这样
http://localhost:51250/Account/Login
重定向到NotAuthorized将起作用


在查看switch语句时,它应该忽略返回URL,我看不出缺少什么。

您没有执行重定向。您告诉它使用NotAuthorized视图进行登录操作。要执行重定向,请使用RedirectToAction()

如果您尚未在帐户控制器中添加NotAuthorized操作,则需要在帐户控制器中添加NotAuthorized操作

[AllowAnonymous]
public ActionResult NotAuthorized()
{
    return View();
}

你没有做重定向。您告诉它使用NotAuthorized视图进行登录操作。要执行重定向,请使用RedirectToAction()

如果您尚未在帐户控制器中添加NotAuthorized操作,则需要在帐户控制器中添加NotAuthorized操作

[AllowAnonymous]
public ActionResult NotAuthorized()
{
    return View();
}

你没有做重定向。您告诉它使用NotAuthorized视图进行登录操作。要执行重定向,请使用RedirectToAction()

如果您尚未在帐户控制器中添加NotAuthorized操作,则需要在帐户控制器中添加NotAuthorized操作

[AllowAnonymous]
public ActionResult NotAuthorized()
{
    return View();
}

你没有做重定向。您告诉它使用NotAuthorized视图进行登录操作。要执行重定向,请使用RedirectToAction()

如果您尚未在帐户控制器中添加NotAuthorized操作,则需要在帐户控制器中添加NotAuthorized操作

[AllowAnonymous]
public ActionResult NotAuthorized()
{
    return View();
}

返回视图不会重定向,返回URL只是一个查询字符串,也不会影响重定向。我无法理解您的问题好的,如果我转到帐户/登录的登录页面,但我没有“管理员”角色,我的切换语句将检查该角色,它将到达
返回视图(“未授权”)部分代码。然后,我将进入未授权页面(视图)。如果我尝试同样的事情,但是从另一个页面重定向到帐户/登录(现在我附加了一个returnURL),我将不会在未授权的页面上结束,即使它仍然到达相同的代码
返回视图(“未授权”)在我的switch语句中。return视图不会重定向,returnurl只是一个查询字符串,也不会影响重定向。我无法理解您的问题好的,如果我转到帐户/登录的登录页面,但我没有“管理员”角色,我的切换语句将检查该角色,它将到达
返回视图(“未授权”)部分代码。然后,我将进入未授权页面(视图)。如果我尝试同样的事情,但是从另一个页面重定向到帐户/登录(现在我附加了一个returnURL),我将不会在未授权的页面上结束,即使它仍然到达相同的代码
返回视图(“未授权”)在我的switch语句中。return视图不会重定向,returnurl只是一个查询字符串,也不会影响重定向。我无法理解您的问题好的,如果我转到帐户/登录的登录页面,但我没有“管理员”角色,我的切换语句将检查该角色,它将到达
返回视图(“未授权”)部分代码。然后,我将进入未授权页面(视图)。如果我尝试同样的事情,但是从另一个页面重定向到帐户/登录(现在我附加了一个returnURL),我将不会在未授权的页面上结束,即使它仍然到达相同的代码
返回视图(“未授权”)在我的switch语句中。return视图不会重定向,returnurl只是一个查询字符串,也不会影响重定向。我无法理解您的问题好的,如果我转到帐户/登录的登录页面,但我没有“管理员”角色,我的切换语句将检查该角色,它将到达
返回视图(“未授权”)部分代码。然后,我将进入未授权页面(视图)。如果我尝试同样的事情,但是从另一个页面重定向到帐户/登录(现在我附加了一个returnURL),我将不会在未授权的页面上结束,即使它仍然到达相同的代码
返回视图(“未授权”)在我的switch语句中。未完成。这很有效。我不确定我是否完全理解为什么我的情况不起作用。这很有效。我不确定我是否完全理解为什么我的情况不起作用。这很有效。我不确定我是否完全理解为什么我的情况不起作用。这很有效。我不确定我是否完全理解为什么我的情况不起作用。