我一直在开发一个网站,但最近有这个问题,主页/索引页面总是重定向到登录页面,除非你已经登录,否则你看不到它,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");
}
}
}
答案 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"))
{
}
。如果你很好,那么页面应该正常呈现。