如何使用ASP.NET MVC 6重定向未经授权的用户

时间:2016-01-04 19:23:09

标签: asp.net asp.net-mvc asp.net-core-mvc

我想知道如何重定向用户。我有一个控制器索引(),我希望只有具有“学生”角色的用户才能进入那里!所以我用

[Authorize(Roles="Student")]

我想知道如何将没有此角色的用户重定向到主页

3 个答案:

答案 0 :(得分:7)

MVC5(及更早版本):

您可以通过更改 web.config 上的loginUrl属性来执行此操作。将其更改为所需的路线:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>

MVC6:

在MVC6中,您可以尝试(在Startup.cs内):

public void ConfigureServices(IServiceCollection services)
{       
    services.Configure<CookieAuthenticationOptions>(options =>
    {
        options.LoginPath = new PathString("/Home/Index");
    });
}

答案 1 :(得分:0)

有一种浮动方法适用于MVC5。我认为它也适用于MVC6。
在您的Controller内,像这样创建一个Custom Auth方法。

    public class YourCustomAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // If they are authorized, handle accordingly
        if (this.AuthorizeCore(filterContext.HttpContext))
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            // Otherwise redirect to your specific authorized area
            filterContext.Result = new RedirectResult("~/YourController/Unauthorized");
        }
    }
}

然后将数据注释更改为

[YourCustomAuthorize(Roles = "Admin")]
public class UserController : Controller
{
     // Omitted for brevity
}

答案 2 :(得分:-6)

您是否尝试使用会话?

我猜你有登录页面然后在登录后尽快分类会议

然后简单如果条件会这样做。

<%If Session("userRole")="Student" Then%>
  This is the text version of the page
<%Else%>
  Response.Redirect("notavailablepage.html")
<%End If%>