반응형
사용자 지정 AuthorizeAttribute 클래스 내에서 RedirectToAction ()을 사용할 수 있습니까?
ASP.Net MVC 2를 사용하면 클래스를 기반으로하는 클래스 내 에서 Controller 클래스 의 RedirectToAction () 메서드 를 사용할 수있는 방법이 있습니까?AuthorizeAttribute
public class CustomAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase context) {
// Custom authentication goes here
return false;
}
public override void OnAuthorization(AuthorizationContext context) {
base.OnAuthorization(context);
// This would be my ideal result
context.Result = RedirectToAction("Action", "Controller");
}
}
로그인 페이지로 돌아가는 대신 인증에 실패하면 사용자를 특정 컨트롤러 / 작업으로 리디렉션하는 방법을 찾고 있습니다. 해당 컨트롤러 / 액션에 대해 리디렉션 URL을 생성 한 다음 RedirectResult () 를 사용할 수 있습니까? URL을 하드 코딩하려는 유혹을 피하려고합니다.
당신은 / 오버라이드 (override) 할 필요가 있습니다 HandleUnauthorizedRequest
대신 OnAuthorization
. 다음은 기본 구현입니다.
protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
// Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs.
filterContext.Result = new HttpUnauthorizedResult();
}
당신은 사용할 수 없습니다 Controller.RedirectToAction
,하지만 당신은 수있는 새로운를 반환 RedirectToRouteResult
.
따라서 다음을 수행 할 수 있습니다.
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
// Returns HTTP 401 - see comment in HttpUnauthorizedResult.cs.
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "ActionName" },
{ "controller", "ControllerName" }
});
}
다음과 같이 할 수 있습니다.
var routeValues = new RouteValueDictionary();
routeValues["controller"] = "ControllerName";
routeValues["action"] = "ActionName";
//Other route values if needed.
context.Result = new RedirectToRouteResult(routeValues);
이것이 컨트롤러에서 "RedirectToAction ()"을 호출 할 때 프레임 워크가 수행하는 방식입니다.
다른 사람이이 질문에 관심이있는 경우. 이것은 더 간단한 방법으로 해결할 수 있습니다 (최소한 MVC 3을 사용하면 MVC 2에 대해 알지 못함).
사용자 지정 AuthorizeAttribute에 작은 개인 컨트롤러를 생성하기 만하면됩니다.
private class RedirectController : Controller
{
public ActionResult RedirectWhereever()
{
return RedirectToAction("Action", "Controller");
}
}
이것은 HandleUnauthorizedRequest 메서드에서 쉽게 사용할 수 있습니다 (Craigs 답변 참조).
filterContext.Result = (new RedirectController()).RedirectWhereever();
반응형
'Program Tip' 카테고리의 다른 글
SQLServer가 불필요한 항목을 작성하는 것을 중지하는 방법 (예 : 영향을받는 행 1 개) (0) | 2020.12.15 |
---|---|
Python 스레드에서 전체 애플리케이션을 종료하는 방법은 무엇입니까? (0) | 2020.12.15 |
객체 배열에서 잘못된 자바 스크립트 배열 길이 (0) | 2020.12.15 |
Java에서 MySQL 날짜 및 타임 스탬프 처리 (0) | 2020.12.15 |
"관대 한"의 사용은 무엇입니까? (0) | 2020.12.15 |