2014-10-17 3 views
0

어제부터이 문제에 대해 고심하고 있습니다. 전자 메일 서비스가 포함 된 웹 응용 프로그램에서 작업하고 있습니다. 해당 응용 프로그램의 특정 페이지에 '링크'이 포함되어 있습니다.ASP.Net MVC의 URL 재 작성

지금 : 나는이 개 시나리오가 :

1) 사용자 이미) 응용 프로그램에서 (에 기록되어있는 경우를 그가 에게 그가 자신의 이메일로받은 URL을 명중 링크가 완벽하게 열립니다 . 사용자 는 응용 프로그램에서 ( 로그인하지 않은 경우

2)) 다음 URL을 열리지 않습니다와 BaseController에 추가 된 기능을 로그인 페이지에 자신을 리디렉션합니다. 사용자가 URL을 타격 이후에 기록하고 에 성공적으로 사용자가 이메일에 제공된 링크로 리디렉션 도착 로그인 할 때 *

지금 내가 원하는 것입니다.

예에 *

: 사용자가 직원의 세부 정보 페이지에 이메일을 얻을 수 있다면, 그래서에 성공적으로 사용자 로그인은 직원의 세부 사항 페이지로 리디렉션 가져옵니다.

로그인 페이지에 redirecturl을 추가하는 것과 같은 것입니다.

URL을 다시 작성하면 내가해야 할 일이라고 생각합니다.

하지만이 경우 어떻게 사용할 수 있는지 잘 모릅니다. 도와주세요.

+0

요청에 따라 returnUrl을 유지하면됩니다. 작은 변경으로도 작동합니다. 아래 내 대답을 참조하십시오. – SBirthare

답변

0

ASP.NET MVC 5와 함께 제공되는 기본 프로젝트 템플릿은 설명대로 작동합니다.

사용자 정의 로그인 URL로 리디렉션하려면

는 CookieAuthenticationOptions의 LOGINPATH 속성이이 Startup.Auth.cs 클래스에서 수행되는 기본 템플릿에서
LoginPath = new PathString("/Account/Login") 

개체 다시 구성합니다.

참고 : 이전 버전의 ASP.NET MVC를 사용하는 경우 기본 프로젝트 템플릿은 동일한 방식으로 작동합니다. 그러나 이전에이 사용자 정의 로그인 URL로 리디렉션하기 위해 있도록 다음 < 형태의 loginUrl 특성을 설정해야 할 것입니다, 폼 인증을 사용하여 구현되었다>의 Web.config의 태그는 기본적 경우에 의해

+0

M은 asp.net mvc 4.5 application.and에서 작동하며 startup.auth.cs 클래스를 제공하지 않습니다. 이제 어떻게해야합니까? – Vishal

+0

기본 프로젝트 템플릿을 살펴보십시오. > 새 프로젝트 - -> ASP.NET 웹 응용 프로그램 그런 다음 "MVC"템플릿을 선택해야합니다 아닌 "빈"템플릿 –

+0

I 당신은 비주얼 스튜디오 2013 파일에서 새 프로젝트를 시작하여이 문제를 볼 수 있습니다 vs2012를 사용하고 있는데 당신이 제안하는 것처럼 기본 템플릿을 제공하지 않습니다. – Vishal

0
  1. 파일 사용자가 권한이없는 페이지에 액세스하려고하면 자동으로 로그인 페이지 또는 요소의 web.config 파일에 구성된 페이지로 리디렉션됩니다. 그리고 처음에 액세스하려고 시도한 url이 url의 로그에 추가되는 쿼리 문자열 returnUrl을 볼 수 있습니다.
  2. return url에 액세스하려면 새 매개 변수를 returnUrl로 포함하고 모델 URL로 숨겨진 필드에 반환 URL을 유지하여 리디렉션을 위해 포스트 백에 액세스합니다.
  3. 사용자가 인증되면 다시 게시 할 때 의도 한 페이지로 사용자를 리디렉션합니다.
+0

로 리디렉션해야하는 경우 Web.config 파일에서 태그의 loginUrl 특성을 설정할 수있는 FormsAuthentication이 사용됩니다. 실제로 쿼리 문자열에 링크가 추가되지 않습니다. – Vishal

+0

@Farzi. 사용자 지정 권한 부여 특성을 사용하고, 그렇지 않으면 OnActionExecuting 메서드에서 사용자가 인증되었는지 여부를 확인합니다. 인증 된 경우 아무 것도하지 않으면 url 리퍼러가 표시되고 referrer url과 함께 쿼리 문자열 returnUrl을 제공하여 사용자를 로그인 페이지로 리디렉션합니다. 또한 리퍼러가 동일한 도메인에서만 온다는 리퍼러 URL의 유효성을 검사하십시오. 이 필터를 전역 적으로 등록 할 수 있습니다. 그럼 내 대답에 제안한대로 단계를 수행 할 수 있습니다. – Venkat

0

내가 정확히 기억하지 않지만 몇 달 전에 나는 유사한 기능을 구현하고 난 (때문에 MVC 버그 또는 무언가)를 명시 적으로 returnUrl을 저장했다 - 스냅 샷 -이 link

AccountController.cs에게를 참조하십시오

 [HttpGet] 
     [AllowAnonymous] 
     public ActionResult Login(string returnUrl, string userName) 
     { 
      // You login method logic.... 

      // Add this line to save the returnUrl value 
      ViewBag.ReturnUrl = returnUrl;  
     } 

Login.cshtml - 스냅 샷

@using (Html.BeginForm("Login", "Account", FormMethod.Post ,new {ReturnUrl = ViewBag.ReturnUrl})) 
{ 
    <input type="hidden" name="ReturnUrl" value="@Request.QueryString["ReturnUrl"]" /> 

// .....    
} 

귀하의 경우에 도움이되는지 확인하십시오.