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 

這一個讓我將用戶重定向到他嘗試訪問他沒有權限訪問的操作之前的頁面。