ASP.net MVC3의 컨텍스트에서 특정 URL로 리디렉션하려고하는 컨트롤러 동작에이 코드 줄이 있습니다.리디렉션 (URL) 작동하지 않음
return Redirect(returnUrl);
returnUrl은 "/ Home/Index /"가 포함 된 문자열입니다. 어떤 이유로 리디렉션이 일어나지 않고 동일한 화면에 남아 있습니다. 나는 후행 슬래시를 제거하려했지만 성공하지 못했습니다. 리디렉션이 발생하지 않는 이유는 무엇입니까?
ASP.net MVC3의 컨텍스트에서 특정 URL로 리디렉션하려고하는 컨트롤러 동작에이 코드 줄이 있습니다.리디렉션 (URL) 작동하지 않음
return Redirect(returnUrl);
returnUrl은 "/ Home/Index /"가 포함 된 문자열입니다. 어떤 이유로 리디렉션이 일어나지 않고 동일한 화면에 남아 있습니다. 나는 후행 슬래시를 제거하려했지만 성공하지 못했습니다. 리디렉션이 발생하지 않는 이유는 무엇입니까?
Redirect
메서드는 사이트의 외부 URL로 리디렉션하고 절대 URL을 전달하는 데 사용됩니다. 당신이 당신의 위치에 속하는 다른 컨트롤러 액션로 리디렉션해야하는 경우는이를 사용하는 것이 더 없을 것입니다 : 당신이 더 이상 URL을 하드 코딩하고 코드가 경로 변화에 덜 취약
return RedirectToAction("Index", "Home");
이 방법.
AJAX로이 리다이렉트를 수행하는 컨트롤러 동작을 호출하는 경우, 브라우저를 임의의 위치로 리다이렉트 할 수는 없다는 것을 알 수 있습니다.> 분명히 같은 페이지에 머무를 것입니다. AJAX 요청은 모든 리디렉션에 이어 성공하고 success 콜백에서는 AJAX없이 요청 된 것처럼 /Home/Index
url의 최종 HTML을 가져옵니다.
당신이 AJAX의 성공 콜백에 재 지정하려면 예를 들어, 컨트롤러 액션 수익을 가질 수 전화 당신이 리디렉션 할 대상 URL을 나타내는 JSON 개체 :
return Json(new { redirectToUrl = Url.Action("Index", "Home") });
하고 콜백을 window.location.href
기능을 사용하면 유효한 로그온 자격 증명을 제공 한 후 같은 로그인 화면에 붙어있는 경우
success: function(result) {
window.location.href = result.redirectToUrl;
}
을, 당신이 폼 인증 쿠키를 설정하지 않은 수 있습니다. 그렇지 않으면 클라이언트는 사용자처럼 취급,
이 보장FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToLocal(returnUrl);
, 쿠키가 재 지정하기 전에 설정 : 당신이 당신의 로그인 actionmethods에 리디렉션 또는 RedirectToLocal를 사용할 때마다
, 당신이 다음과 같은 순서로 호출 할 수 있도록 로그인하지 않았습니다.
감사합니다.
먼저 모든 답변을 드리겠습니다. 여기 AJAX를 사용하지 않으므로 회신의 두 번째 부분을 배제 할 수 있습니다. 이상 적으로는 RedirectToAction()을 사용하고 싶지만 여기서 returnUrl을 원래 요청한 페이지로 가져 오는 인증을 사용하고 있습니다. 이 원래 요청은 응용 프로그램의 모든 페이지가 될 수 있습니다. 컨트롤러와 액션을 RedirectToAction()으로 하드 코딩 할 수는 없습니다. 문자열 조작 기술을 사용하여 returnUrl에서 Controller와 Action 파트를 처리하는 옵션이 있습니다. (심지어 매우 어려울 것입니다.)하지만 더 나은 솔루션. – Jatin
@Nirvan 대신 returnUrl 문자열 변수를 보내면 컨트롤러와 액션 인 2 개의 변수를 보냅니다. 이렇게하면 필요한 URL을 만들 수 있습니다. 그렇지 않다면'http : // yoursite.com/home/index'와 같은 리디렉션으로 절대 URL을 사용해보십시오. –
@Darain, 죄송합니다. 인증 정보에 대해서는 분명히 알지 못했습니다. 기본적으로 asp.net 인증은 로그인하기 전에 원래 요청 된 페이지를 추적합니다. 나는 returnUrl을 채우지 않는다. 예를 들어 사용자가 로그인하기 전에/Home/Index에 액세스하려고한다고 가정합니다. Asp.net 인증 단계는 내 응용 프로그램의 로그인 페이지로 들어가서 리디렉션합니다. 여기서 서버는 returnUrl을 "/ Home/Index"로 채 웁니다.따라서 원래 요청한 페이지의 URL을 포함하는 로그인 컨트롤러에서 문자열 (regurnUrl) 만 얻는 것을 볼 수 있습니다. – Jatin