我有一个设置了多个区域的 MVC4 应用程序。每个区域必须有自己的登录页面。举例来说,我有以下领域:
主要的
行政
如何设置才能使“主要”区域与“管理”区域具有不同的登录页面?我认为 web.config 不是解决这个问题的方法。
目前我的根 web.config 文件中有以下内容:
<authentication mode="Forms">
<forms loginUrl="~/Admin/Login" timeout="2880" protection="Encryption" />
</authentication>
然而,我正在努力弄清楚如何使其适应带有区域的 MVC4。
请帮忙。
我不知道您是否可以使其与每个文件夹中的配置文件一起使用。如果可以的话,使用该解决方案。如果不能,您可以使用以下自定义操作过滤器:
public class AreaAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
string area = filterContext.RouteData.Values.ContainsKey("area")
? filterContext.RouteData.Values["area"].ToString()
: null;
if (area == "Admin")
{
RouteValueDictionary routeValues = new RouteValueDictionary
{
{"controller" , "Login"},
{"action" , "Index"},
{"area" , "Admin"}
};
filterContext.Result = new RedirectToRouteResult("AdminAreaRoute", routeValues);
}
else if (area == "User")
{
RouteValueDictionary routeValues = new RouteValueDictionary
{
{"controller" , "Login"},
{"action" , "Index"},
{"area" , "User"}
};
filterContext.Result = new RedirectToRouteResult("UserAreaRoute", routeValues);
}
base.HandleUnauthorizedRequest(filterContext);
}
}
您可能需要修复路由名称,我不记得 ASP.NET MVC 是否为每个区域生成了路由。然后你可以像这样使用它:
[AreaAuthorize]
public ViewResult Index()
{
return View("Index");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)