Ответ 1
Как работает стандартный AuthorizeAttribute, устанавливается код состояния ответа на 401, если запрос не аутентифицирован. Это приводит к стандартным ответам модуля аутентификации по умолчанию на несанкционированный запрос. Я предполагаю, что вы используете аутентификацию на основе форм, которая будет строить возвращаемый url на основе URL-адреса в запросе. В этом случае, вероятно, относительный URL.
Одна вещь, которую вы можете сделать, - вместо того, чтобы полагаться на встроенное поведение, вы можете реализовать SSOAuthorizeAttribute, который расширяет класс AuthorizeAttribute и переопределяет OnAuthorization. Затем вы можете извлечь loginUrl из элемента forms в веб-конфигурации и создать собственный RedirectResult и вытащить returnUrl из свойства HttpContext.Request.Url.AbsoluteUri в параметре AuthorizationContext.
public class SSOAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(
AuthorizationContext filterContext )
{
if (filterContext == null)
{
throw new ArgumentNullException( "filterContext" );
}
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// get from cached variable from web configuration
string loginUrl = ...
if (filterContext.HttpContext.Request != null)
{
loginUrl += "?ReturnUrl=" + filterContext.HttpContext
.Request
.Url
.AbsoluteUri;
}
filterContext.Result = new RedirectResult( loginUrl );
}
}
}