相关疑难解决方法(0)

如果 URL 有查询字符串,AuthorizeAttribute 不起作用?

在 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

然后尝试访问:

authentication asp.net-mvc-3 iis-8

5
推荐指数
1
解决办法
1121
查看次数

使用自定义AuthorizeAttribute生成返回URL

我有自定义授权属性:

using System;
using System.Web.Mvc;
using System.Web.Routing;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "Login" }));
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...我用来装饰某些控制器:

[MyAuthorizeAttribute(Roles = "Superman, Batman, Spiderman")]
public class SuperHeroController : Controller
{
    // ....
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释如何修改授权代码,以便如果授权失败,登录URL包括ReturnUrl(当前控制器/方法的URL)?

这基本上是试图模仿Web表单ReturnUrl逻辑,但是以一种聪明的方式,我不必手动使用字符串作为URL.

asp.net asp.net-mvc asp.net-mvc-5.2

4
推荐指数
1
解决办法
5762
查看次数

MVC Owin Cookie 身份验证 - 覆盖 ReturnUrl 生成

我有一个使用 Owin Cookie 身份验证的 MVC 应用程序。我启用了 SlidingExpiration 并正常工作。但是,当用户的登录过期并将它们发送回 LoginPath 时,ReturnUrl 给我带来了一些问题:

  1. 如果 ReturnUrl 指向 GET 操作,而不是POST 操作,我只希望包含它。
  2. 我想包括 PathAndQuery 而不仅仅是 Path 以便我可以重新填写用户可能在表单上填写的任何项目。

我尝试创建自己的 AuthorizeAttribute(下面的代码)并将其应用于我的一个控制器中的某些方法,但似乎在会话过期时它永远不会被命中。

public class CheckLoginExpirationFilter : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.Result is HttpUnauthorizedResult)
        {
            string returnUrl = null;
            if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.CurrentCultureIgnoreCase))
                returnUrl = filterContext.HttpContext.Request.Url.GetComponents(UriComponents.PathAndQuery, UriFormat.SafeUnescaped);

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
        {
            { "client", filterContext.RouteData.Values[ "client" ] },
            { "controller", "Security" },
            { "action", "Login" },
            { "ReturnUrl", returnUrl }
        }); …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc asp.net-mvc-5

3
推荐指数
1
解决办法
2283
查看次数