Мы создаем приложение, которое является клиентским приложением 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 Я ожидаю, что это значение будет «/ #/Product/171», но это не так. Это всегда просто «/». Не включает ли это свойство ссылки на уровне страницы? Я что-то упускаю?
Облом. Я подозревал (и боялся), что может быть так. Спасибо, что подтвердили это. Теперь я могу приступить к тому, чтобы решить, буду ли я пытаться выяснить другое решение для захвата этой информации и навигации соответственно. –