2015-04-25 141 views
3

我对ASP.NET很陌生,我试图创建一个简单的CRUD应用程序,如果用户没有登录,我想让某些页面重定向到登录页面英寸我不想做一个站点范围重定向登录所有不是主页的页面。我一直在与控制器瞎搞,并已发现,在控制器中使用此代码会重定向到登录页面,如果用户没有登录:ASP.NET将某些页面重定向到登录页面

public ActionResult Index() 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     return View(db.Events.ToList()); 
    } 
    else 
    { 
     Response.Redirect("Account/Login",true); 
     return null; 
    } 
} 

我有一种感觉,这绝对不是最好的ASP.NET的实践。如果有人能够解释为什么,或者指出我会朝着正确的方向发展,那就太好了。

回答

3

您可以使用[Authorize]属性,如果用户未被授权,它将重定向到登录页面。

[Authorize] 
public ActionResult Index() 
{ 
    return View(); 
} 

这是你需要在web.config

+0

这做到了!谢谢!非常感谢:) – ChrisRiv91

+0

如果这个答案已经解决了您的问题,请选择它作为选定的答案@ ChrisRiv91 –

+1

@AydinAdn刚刚做了,被锁定了几分钟:) – ChrisRiv91

1

配置您的登录页面,您的使用整个控制器或特定的控制器方法上Authorize属性。如果用户还没有的角色,因为他们没有登录,他们将被重定向到登录页面

[Authorize(Roles = "SomeAppRole")] 
public class HomeController : Controller 

[Authorize(Roles = "SomeAppRole")] 
public ActionResult Index() 
{ 
    // etc 
} 

注意,角色是可选的。

+0

感谢您的回应!这些角色可能会在后来派上用场。 – ChrisRiv91

1

您可以使用您的操作中的授权属性。

[Authorize] 
public class HomeController: Controller{ 

    [Authorize] 
    public ActionResult Index() 
    {} 


    [Authorize] 
    public ActionResult Index() 
    {} 

    [AllowAnonymous] 
    public ActionResult Help() 
    {} 
} 

您可以在控制器级别应用Authoirze属性,以便您不必将其应用于控制器中的所有操作。

如果你想忽略使用在控制器级别应用授权任何行动,那么你可以用标记[使用AllowAnonymous] action属性

+0

很高兴知道[AllowAnonymous],这一定会有所帮助! – ChrisRiv91