我的网站中有2个角色admin和employee,还有2个layout.cshtml。在我的_viewstart.cshtml文件中
@{
if (!ReferenceEquals(Session["Role"], null))
{
if (Session["Role"].ToString() == "Admin")
{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }
else
{ Layout = "~/Views/Shared/_EmployeeLayout.cshtml"; }
}
else
{
Response.Redirect("~/");
}
}
一切正常,但是其他部分,如果session等于null,则重定向到登录页面“〜/”。它还在登录页面上重定向,但问题是在登录视图中,当请求进入服务器以获取脚本或.css文件时,我有一些css链接和脚本链接。服务器再次重定向到_viewstart.cshtml并再次执行所有进程,我收到此错误
此网页有重定向循环 localhost地址的网页导致重定向过多。清除此站点的cookie或允许第三方cookie可以解决问题。如果没有,则可能是服务器配置问题,而不是计算机问题。
请在我的代码中建议我解决方案或让我知道我错在哪里
1.Is _viewstart.cshtml是否对每个请求执行不仅包含视图? 2.如何删除此错误?
答案 0 :(得分:0)
而不是Response.Redirect为什么不使用RedirectToAction
答案 1 :(得分:0)
_ViewStart.cshtml
。
在这种情况下,您使用两种类型的布局,一种用于管理员,另一种用于员工。
您将为匿名用户使用哪种布局?
对于匿名用户,显然Session["Role"]
将为空,您再次重定向到登录操作,该操作再次输出一个视图,该视图再次调用_ViewStart.cshtml
,因此您处于循环中。
我想您不应该在_ViewStart.cshtml
中重定向到登录页面,基本上应该由授权过滤器来处理。
你可以改变这样的条件,
@{
if (!ReferenceEquals(Session["Role"], null))
{
if (Session["Role"].ToString() == "Admin")
{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }
else
{ Layout = "~/Views/Shared/_EmployeeLayout.cshtml"; }
}
else
{
Layout = "~/Views/Shared/_GeneralLayout.cshtml";
}
}
答案 2 :(得分:0)
简单地说,@ Mark是对的。始终调用_ViewStart.cshtml
,即使对于没有布局的页面也是如此。所以,你处于一个循环中。因此,请在_ViewStart.cshtml
@{
if (!ReferenceEquals(Session["Role"], null))
{
if (Session["Role"].ToString() == "Admin")
{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; }
else
{ Layout = "~/Views/Shared/_EmployeeLayout.cshtml"; }
}
else
Layout = null;
}
然后,创建一个BaseController类,向其添加以下方法,并使所有控制器扩展它。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (ReferenceEquals(Session["Role"], null))
Redirect("~/");
base.OnActionExecuting(filterContext);
}