C#-Asp.net MVC Home / Index页面重定向到登录页面

时间:2015-07-03 19:57:18

标签: c# asp.net asp.net-mvc

我一直在开发一个网站,但最近有这个问题,主页/索引页面总是重定向到登录页面,除非你已经登录,否则你看不到它,Home Controller被[AllowAnonymous]包围 我的defulat路线仍然是相同的。

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

我没有什么可以导致这个问题,我以前从未有过这个,我尝试过添加和删除[AllowAnonymous],仍然是同样的问题,但奇怪的是Index是家庭控制器中唯一的动作要求登录,否则正常工作

[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");
            }

        }
}

1 个答案:

答案 0 :(得分:0)

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

例如,让我们创建一个名为 static void Main(string[] args) { List<Delivery> deliveries = new List<Delivery>(); string[] doesntwork = new string[5]; Delivery thing = new Delivery() thing = Delivery.newDelivery(doesntwork, doesntwork); deliveries = Parse.parseDeliveries(@"C:\Users\owner\Documents\Visual Studio 2015\TIY\Week-1-Day-4\planet_express_logs.csv"); Delivery Delivery1 = deliveries[1]; Console.WriteLine(deliveries.Count); Console.ReadLine(); } } public class Delivery { private String destination { get; set; } private String itemDelivered { get; set; } private String pilot { get; set; } private int numberOfCrates; private double moneyMade { get; set; } private DateTime orderCreatedOn { get; set; } //public int numberOfCrates //{ // get { return _numberOfCrates; } // set { this.numberOfCrates = value; } //} public static Delivery newDelivery(string[] keys, string[] values) { Delivery aDelivery = new Delivery(); for (int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() == "what got shipped") aDelivery.itemDelivered = values[i]; if (keys[i].ToLower() == "number of crates") aDelivery.numberOfCrates = Convert.ToInt32(values[i]); if (keys[i].ToLower() == "money we made") aDelivery.moneyMade = Convert.ToDouble(values[i]); if (keys[i].ToLower() == "order created on") aDelivery.orderCreatedOn = Convert.ToDateTime(values[i]); if (keys[i].ToLower() == "destination") { aDelivery.destination = keys[i]; if (keys[i].ToLower() == "earth") { aDelivery.pilot = "Fry"; continue; } if (keys[i].ToLower() == "mars") { aDelivery.pilot = "Amy"; continue; } if (keys[i].ToLower() == "uranus") { aDelivery.pilot = "Bender"; continue; } else aDelivery.pilot = "Leela"; } } Console.WriteLine("{0} {1} {2} {3}", aDelivery.destination, aDelivery.numberOfCrates, aDelivery.moneyMade, aDelivery.itemDelivered); return aDelivery; } // use this to print out data // implement class and inheritance // pilots and their deliveries } public class Parse // change to private and enable strings { // keep all parsing things in here public static List<Delivery> parseDeliveries(string file) { bool firstLine = true; List<Delivery> allDeliveries = new List<Delivery>(); string[] fileContents = System.IO.File.ReadAllLines(@file); string[] keys = new string[fileContents.Length], values = new string[fileContents.Length]; foreach (String line in fileContents) { if (firstLine) { keys = line.Split(','); firstLine = false; continue; } values = line.Split(','); allDeliveries.AddRange(parseKey(keys, values)); } return allDeliveries; } public static List<Delivery> parseKey(string[] placeHolder, string[] keys) { List<Delivery> allDeliveries = new List<Delivery>(); string[] trimmedKeys = new string[keys.Length]; string[] values = new string[placeHolder.Length]; for (int i = 0; i < keys.Length; i++) { trimmedKeys[i] = keys[i].Trim(); values[i] = placeHolder[i]; Delivery delivery = new Delivery(); allDeliveries.Add(Delivery.newDelivery(trimmedKeys[i], values[i])); } return allDeliveries; } }

的属性
CustomAuthorize

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

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

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;    
     }

 }

请记住,在每个人都可以访问Action方法的情况下放置属性[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(); } } 。在“公共”方法中,您可以包含以下内容以允许特定于角色的实现:

[AllowAnonymous]

如果您没有所需的角色,您将被重定向到if(this.User.IsInRole("Administrator")) { } 。如果你很好,那么页面应该正常呈现。