我們正在建立一個應用程序,它是一個Silverlight客戶端應用程序,但我們已經創建了一個MVC控制器和一些簡單的觀點來處理Silverlight控件的認證和託管本應用。作爲安全性實現的一部分,我創建了一個自定義的授權過濾器屬性來處理這個問題,但得到一些意外的結果,試圖在驗證後正確處理重定向。自定義屬性授權意外HttpContext.Request.RawUrl結果
例如,我們的Silverlight應用程序的導航框架允許用戶深層鏈接到應用程序本身的個人網頁,如http://myapplicaton.com/#/Product/171。我想要的是能夠強制用戶登錄以查看此頁面,但是在成功驗證後成功將其重新導向到該頁面。我的問題是獲取完整的請求URL來將用戶重定向到我的自定義授權篩選器屬性類中。
這是我的屬性代碼如下所示:
public class RequiresAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
protected bool AuthorizeCore(HttpContextBase httpContext)
{
var cookie = Cookie.Get(SilverlightApplication.Name);
if (SilverlightApplication.RequiresLogin)
{
return
((cookie == null) ||
(cookie["Username"] != httpContext.User.Identity.Name) ||
(cookie["ApplicationName"] != SilverlightApplication.Name) ||
(Convert.ToDateTime(cookie["Timeout"]) >= DateTime.Now));
}
else
return false;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext != null && AuthorizeCore(filterContext.HttpContext))
{
var redirectPath = "~/login{0}";
var returnUrl = filterContext.HttpContext.Request.RawUrl;
if (string.IsNullOrEmpty(returnUrl) || returnUrl == "/")
redirectPath = string.Format(redirectPath, string.Empty);
else
redirectPath = string.Format(redirectPath, string.Format("?returnUrl={0}", returnUrl));
filterContext.Result = new RedirectResult(redirectPath);
}
}
}
因此,在這種情況下,如果我直接瀏覽到http://myapplicaton.com/#/Product/171,在OnAuthorize方法,在那裏我抓住了filterContext.HttpContext.Request.RawUrl財產,我希望它的價值是「/#/產品/ 171」,但事實並非如此。它總是「/」。該屬性是否不包含頁面級鏈接?我錯過了什麼嗎?
無賴。我懷疑(也擔心)可能是這種情況。感謝至少確認它。我現在可以決定我是否要去嘗試找出另一種解決方案,用於捕獲信息並據此進行導航。 – 2010-03-03 19:58:39