클라이언트 용 페이지를 호스팅하는 멀티 테넌시 웹 사이트를 만들고 있습니다. URL의 첫 번째 세그먼트는 다음 URL 라우팅 체계를 사용하여 Global.asax에 정의 된 클라이언트를 식별하는 문자열입니다.
"{client}/{controller}/{action}/{id}"
이것은 / foo / Home / Index와 같은 URL에서 잘 작동합니다.
그러나 [Authorize] 속성을 사용할 때 동일한 매핑 체계를 사용하는 로그인 페이지로 리디렉션하고 싶습니다. 따라서 클라이언트가 foo이면 로그인 페이지는 web.config에 정의 된 고정 / Account / Login 리디렉션 대신 / foo / Account / Login이됩니다.
MVC는 HttpUnauthorizedResult를 사용하여 401 무단 상태를 반환하는데, 이로 인해 ASP.NET이 web.config에 정의 된 페이지로 리디렉션됩니다.
그렇다면 누구나 ASP.NET 로그인 리디렉션 동작을 재정의하는 방법을 알고 있습니까? 아니면 사용자 지정 권한 부여 속성을 만들어 MVC에서 리디렉션하는 것이 더 낫습니까?
편집-답변 : .Net 소스를 파헤친 후 사용자 지정 인증 속성이 최상의 솔루션이라고 결정했습니다.
public class ClientAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization( AuthorizationContext filterContext )
{
base.OnAuthorization( filterContext );
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult )
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}