2016-10-31 122 views
1

我正在开发一个使用MVC 5的应用程序。我已经编写了用于登录功能的代码。当我尝试启动应用程序时,登录页面正在添加一个查询字符串参数ReturnUrl。这里是我的代码:Login url中的ReturnUrl参数

  public ActionResult Login() 
      { 
       var authentication = Authentication; 
       if (Request.HttpMethod == "POST") 
       { 
        //code for user validation 
       } 

       return View(); 
      } 

我无法找到将url添加到ReturnUrl参数的代码。任何人都可以帮助我,我可以找到添加了ReturUrl参数的代码吗?

+0

检查控制器文件夹中的AccountController.cs的你的项目 – Shiham

+0

代码段中显示从AccountCon复制troller.cs。但是我无法找到任何与ReturnUrl相关的代码。 –

+0

详细问题:我为ForgetPassword创建了一个页面,并且在那里添加了登录页面的链接。当我重定向回登录页面时,没有ReturnUrl参数被添加到url。 @ Html.ActionLink(“进入登录页面”,“登录”,“帐户”),我已经使用此代码在ForgetPassword页面中创建一个到登录页面的链接。 –

回答

2

默认情况下,AuthorizeAttribute类是System.Web.Mvc命名空间的一部分(请参阅Github存储库:aspnetwebstack)。该方法导致了登录重定向有HandleUnauthorizedRequest

protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    // Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs. 
    filterContext.Result = new HttpUnauthorizedResult(); 
} 

HTTP以上从方法401的状态码的响应将触发FormsAuthenticationModule(见下文参考),其中OnLeave方法重定向与包括FormsAuthentication.ReturnUrlVar属性登录网址:

strRedirect = loginUrl + "?" + FormsAuthentication.ReturnUrlVar + "=" + HttpUtility.UrlEncode(strUrl, context.Request.ContentEncoding); 

// Do the redirect 
context.Response.Redirect(strRedirect, false); 

要覆盖此行为(包括删除ReturnUrl部分),请创建授权类,从AuthorizeAttribute类延伸,例如(这是一个示例实现):

using System.Web.Mvc; 
using System.Web.Routing; 

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    // @Override 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.Request.IsAuthenticated) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
      new { controller = "Account", 
        action = "Login" 
       })); 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 

然后,您可以实现这样一个自定义的授权属性:

[CustomAuthorizeAttribute] 
public ActionResult UserPage() 
{ 
    return View(); 
} 

注:使用AuthorizeAttribute上的所有网页,需要用户登录认证,对登录页面改为使用AllowAnonymousAttribute

相关参考资料:

System.Web.Security.FormsAuthenticationModule (MS Github reference)

What initially sets the ReturnUrl parameter when using AuthorizeAttribute

Generate a return Url with a custom AuthorizeAttribute

How to remove returnurl from url?

+0

有用的答案,谢谢! –

1

这是asp.net认证的默认行为。当您尝试访问私人网址时,会添加“returnUrl”。如果你想删除它,你需要一个授权类的自定义实现。

+0

我可以在哪里找到授权课程? –

+0

'AuthorizeAttribute'类默认是System.Web.Mvc命名空间的一部分,您可以创建授权类,该类从'AuthorizeAttribute'扩展用于自定义授权功能。 –

+0

这就是我说的,我在哪里分享我的代码,但山本哲也已经分享了。 –

相关问题