[英]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.