繁体   English   中英

C#-Asp.net MVC主页/索引页面重定向到登录页面

[英]C# -Asp.net MVC Home/Index page redirect to login page

我已经开发了一段时间,但是最近出现了这个问题,主页/索引页面始终重定向到登录页面,除非您登录,否则您将看不到它,主页控制器被[AllowAnonymous]我的无效路由所包围还是一样。

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

我不是什么会引起这个问题的,我以前从未有过,我尝试过添加和删除[AllowAnonymous],仍然是同样的问题,但是奇怪的是Index是home控制器中唯一需要登录的操作,否则工作正常

[AllowAnonymous]
 public class HomeController : Controller
    {
public ActionResult Index()
        {
            try
            {
                using (ApplicationDbContext db = new ApplicationDbContext())
                {

                    var types = (from r in db.FeedBack
                                 select new FeedBackView { ID = r.ID, Name = r.Name, Jop = r.Jop, Body = r.Body }).Take(7).ToList();
                    var SlidersList = (from r in db.Sliders
                                       select new SliderView { Description = r.Description, Title = r.Title, ImageURL = r.ImageURL }).ToList();
                    var FeaturesList = (from r in db.Features
                                        select new FeatureView { Description = r.Description, Title = r.Title, ImageURL = r.ImageURL }).ToList();
                    var AccordionList = (from r in db.Accordion
                                         select new AccordionView { Description = r.Description, Title = r.Title, ImageURL = r.ImageURL }).ToList();
                    var ServicesList = (from r in db.Services
                                        select new ServiceView { Body = r.Body, Name = r.Name, ImageURL = r.ImageURL, Glaphicon = r.Glaphicon, ID = r.ID }).Take(6).ToList();

                    var portfolioTypesList = (from r in db.PortfolioTypes
                                              select new PortfolioTypeView { Name = r.Name, ID = r.ID, filter = r.filter }).Take(5).ToList();
                    List<PortfolioView> Portfolios = new List<PortfolioView>();
                    List<PortfolioView> toadd = new List<PortfolioView>();
                    portfolioTypesList.ForEach(r =>
                    {
                        //Portfolios.AddRange((from s in db.Portfolios
                        //                     where s.PortfolioTypeID == r.ID
                        //                     select new PortfolioView { TypeName = r.Name, ID = s.ID, filter = r.filter, ProjectName = s.ProjectName }
                        //                         ).Take(6).ToList());

                        toadd = (from s in db.Portfolios
                                 where s.PortfolioTypeID == r.ID
                                 select new PortfolioView { TypeName = r.Name, ID = s.ID, filter = r.filter, ProjectName = s.ProjectName }).Take(6).ToList();
                        Portfolios.AddRange(toadd);
                    });

                    var x = new List<PortfolioView>();
                    PortfolioImage im = new PortfolioImage();
                    Portfolios.ForEach(r =>
                    {
                        im = db.PortfolioImages.Where(s => s.PortfolioID == r.ID).FirstOrDefault();
                        if (im != null)
                        {
                            x.Add(new PortfolioView()
                            {
                                ID = r.ID,
                                TypeName = r.TypeName,
                                ProjectName = r.ProjectName,
                                URL = im.ImageURL,
                                filter = r.filter
                            });
                        }
                        else
                        {
                            x.Add(new PortfolioView()
                            {
                                ID = r.ID,
                                TypeName = r.TypeName,
                                ProjectName = r.ProjectName,
                                URL = "",
                                filter = r.filter
                            });
                        }
                    }
                           );

                    var Articels = (from e in db.Articles
                                    select new ArticleViewModel
                                    {
                                        Body = e.Body,
                                        Title = e.Title,
                                        ImageURL = e.ImageURL,
                                        ID = e.ID
                                    }).Take(3).ToList();

                    //var Social = db.Others.FirstOrDefault();
                    //ViewBag.Social = SocialMedia.convert(Social);                
                    ViewBag.Articels = Articels;
                    ViewBag.portfolioTypesList = portfolioTypesList;
                    ViewBag.Portfolios = x;
                    ViewBag.ServicesList = ServicesList;
                    ViewBag.AccordionList = AccordionList;
                    ViewBag.SliderList = SlidersList;
                    ViewBag.FeaturesList = FeaturesList;
                    ViewBag.FeedBackGo = types;
                    return View();
                }

            }
            catch (Exception ex)
            {
                return RedirectToAction("Error");
            }

        }
}

您是否尝试过自定义属性?

例如,让我们创建一个名为CustomAuthorize的属性

public class CustomAuthorize: AuthorizeAttribute    
 {

     protected override void HandleUnauthorizedRequest(AuthorizationContext    
     filterContext)    
     {     
           if (IsUserAuthenticated(filterContext.HttpContext))    
           {    
            filterContext.Result = new   RedirectResult("/Account/InvalidRole");    
           }    
           else    
           {    
            base.HandleUnauthorizedRequest(filterContext);    
           }    
     }

     private bool IsUserAuthenticated(HttpContextBase context)    
     {    
            return context.User != null && context.User.Identity != null &&     
            context.User.Identity.IsAuthenticated;    
     }

 }

默认情况下,如果用户没有正确的角色来访问应用程序的某些部分,则Authorize属性将导致登录页面。

现在要实现此目的,您应该执行以下操作。

[CustomAuthorize(Roles="Admin,Manager")]
public class MyController
{

      // Everyone has access
      [AllowAnonymous]
      public ActionResult Index()
      {
      return View();
      }

      // Only Admin and Manager roles have access, everyone else is denied
      public ActionResult About()
      {
      return View();
      } 

}

请记住在每个人都可以访问Action方法的情况下放置[AllowAnonymous]属性。 在“ public”方法内,您可以包括以下内容以允许特定于角色的实现:

if(this.User.IsInRole("Administrator"))
{

}

如果没有所需的角色,您将被重定向到/Account/InvalidRole 而且,如果您一切顺利,则页面应正常显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM