31

我写了一个授权筛选器属性adn我无法弄清楚如何将当前url作为字符串获取,因此我可以将它作为参数传递给LogOn操作。目标是如果用户成功登录,他们将被重定向到他们最初尝试访问的页面。如何从FilterAttribute中获取当前Url?

public override void OnAuthorization(AuthorizeContext filterContext) 
{ 
    base.OnAuthorization(filterContext); 

    ... my auth code ... 
    bool isAuth ; 
    ... my auth code ... 

    if(!isAuth) 
    { 
     filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary { 
       { "Area", "" }, 
       { "Controller", "Account" }, 
       { "Action", "LogOn" }, 
       { "RedirectUrl", "/Url/String/For/Currnt/Request" } // how do I get this? 
      } 
     ); 
    } 
} 

如何从当前请求获取完整的字符串Url?

回答

59

尝试:

var url = filterContext.HttpContext.Request.Url; 
+6

你也可以使用RawUrl(filterContext.HttpContext.Request.RawUrl)来获得没有域的url –

15

要获得完整的URL你可以尝试通过@rboarman但建议通常RedirectUrl将是相对URL,并为您必须尝试的了的RawUrl财产Request对象。

filterContext.HttpContext.Request.Url ===> http://somesite.com/admin/manage 

filterContext.HttpContext.Request.RawUrl ====> /admin/manage 

编辑:修正了第二个例子

+0

你的意思是在你的第二个例子中使用“RawUrl”吗? –

+0

-1观察“Url”的值并不会神奇地使其成为绝对的,而是相对的。 –

+0

@JoshNoe是的,我的意思是第二个例子中的RawUrl。现在我离开我很少,我错过了看到你的评论。 – VJAI

4

在我的特定情况下,我是UrlReferrer URL后。

filterContext.HttpContext.Request.UrlReferrer 

这一个让我将用户重定向到他尝试访问他没有权限访问的操作之前的页面。