Jos*_* M. 5 authentication asp.net-mvc-3 iis-8
在 ASP.NET MVC3 Web 应用程序中,整个控制器都[Authorize]附加了一个属性。因此,如果用户未登录或会话过期,他们将被重定向到登录页面。这是有效的……有时。下面“作品”列表中的 URL 正确重定向到登录页面;“不起作用”列表中的 URL 会显示 IIS 401 错误屏幕 - 它们不会重定向到登录页面。
作品
不起作用
MyAction动作的模型public string ReturnUrl { get; set; }在其基类中有一个。它还具有其他属性,但将这些添加到查询字符串不会影响登录重定向。似乎只有 ReturnUrl 参数。
我不知道还有什么要研究的。任何想法为什么ReturnUrl参数会引起麻烦?
路线
routes.MapRoute("Default-Title-ID", "{Controller}/{Action}/{Title}_{ID}", namespaces);
routes.MapRoute("Default-ID", "{Controller}/{Action}/{ID}", namespaces);
routes.MapRoute("Default", "{Controller}/{Action}", new { Controller = "Home", Action = "Index" }, namespaces);
routes.MapPageRoute("Reports-View", "ViewReport_{ID}", "~/Views/Reports/View.aspx");
Run Code Online (Sandbox Code Playgroud)
工作实例(当然,不是工作,而是说明了这个问题。)
在此处下载解决方案:https : //docs.google.com/file/d/0B4o6vqgNLpvbeVo4bVdKZWFMcEE/edit?usp=sharing
然后尝试访问:
我想将此作为评论发布,但我太长了。我需要为我的一个应用程序进行动态重定向,并使用了以下解决方案(它使用调用它的控制器而不是 web.config 中的静态 URL)。当用您的示例对此进行测试时,它解决了问题。但我不明白为什么。也许它会引导您走上正确的道路,或者其他人可以澄清。
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1.App_Start
{
public class LoginRequiredAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
{
{ "controller", filterContext.RouteData.Values[ "controller" ] },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需更改操作即可使用新属性:
[LoginRequired]
public ActionResult TestMe()
Run Code Online (Sandbox Code Playgroud)