2011-02-24 7 views
11

asp.net 응용 프로그램을 mvc3으로 변환 중입니다. 내가 https가 필요한 페이지에 로그인이 있고 다른 모든 페이지에만 http가 필요하다는 것을 말하면 어떻게 https로 로그인을 리디렉션하고 http의 다른 모든 페이지도 유지할 수 있습니까?mvc3 https & http

어떤 제안이 좋을까요?

답변

14

RequireHttpsAttribute 클래스가 원하는 것일 수 있습니다. 당신이 그것을 터치하지 않아도 원인 1 :

[RequireHttps] 
public ActionResult SignIn() { 
    return View(); 
} 
+0

멋진 감사 Bertrand! mvc는 삶을 편하게 만듭니다. –

+0

로그인 한 후 질문에 따라 http를 사용하여 명시 적으로 다음 페이지로 리디렉션해야합니다. 이렇게하면 https에 전체 시간을 걸리지 않습니다. – Jab

+0

@jab은 http를 사용하여 명시 적으로 다음 페이지로 리디렉션합니까? RedirectToAction()을 사용하여 가능합니까? – pramodtech

2

문제는 모든 요청에 ​​로그인 한 후에 당신이 있기 때문에

4

나는이 솔루션을 같이하지 않으려는 경우에도 HTTPS를 할 예정이다 다시 VS에서. 데코레이터 자체만으로는 브라우저가 디버그 상태에서도 https로 사이트를 렌더링합니다.

  1. 당신은 기본 컨트롤러로 구현하고 모든 컨트롤러는 더 "말하자면"않습니다 뒷면에 미끄럼이없는 알고, 해당 컨트롤러에서 상속하는 경우.

    #if !DEBUG 
    #define RELEASE 
    #endif namespace ProjectName.UI.Controllers { 
        using System.Web.Mvc; 
        #if RELEASE 
         [RequireHttps] 
        #endif 
        public abstract partial class ProjectNameBaseController : Controller 
        { 
        } 
    } 
    
4

지뢰의 동료와 나는이 쳐다 보면서 우리가 좋은 해결책을 찾을 생각합니다. 이것은 RequireHttpsAttribute을 확장하여 작동

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class HttpsRequiredAttribute : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     // Check to see if we're secure 
     string requirestr = ConfigurationManager.AppSettings["RequireHttps"]; 
     bool require; 
     if (bool.TryParse(requirestr, out require) && require) 
      base.HandleNonHttpsRequest(filterContext); 
    }  

} 

하고 AttributeTargets로 표시된 바와 같이, 클래스 나 메소드에 적용 할 수 있습니다 : 여기에 우리가 해낸 것입니다. 그런 다음 RequireHttpsAttribute에서 가상 함수를 재정의했습니다. 메서드가 수행하는 작업은 Web.config 파일에서 "RequireHttps"라는 키를 확인하는 것입니다. 찾을 수 없거나 유효하지 않은 bool 값 (bool.tryse가 확인하는 값)이면 Https가 필요하지 않습니다. 값이 참이면 HTTPS가 필요합니다.

이 확장을 사용하는 경우, 당신이 너무 좋아 ", RequireHttps"라는의 Web.config에 키를 추가해야합니다 : 이 <add key="RequireHttps" value="true"/> 그런 다음 때를 위해이 변수를 변경하여 HTTPS의 요구 사항을 해제 할 수 있습니다 디버깅을하거나 Web.config 파일을 변경하여 사이트가 배포 된 곳마다 요구 사항을 충족시킬 수 있습니다.