난 당신이 클래스
public class RequireHttpsConditional : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
var useSslConfig = ConfigurationManager.AppSettings["UseSSL"];
if (useSslConfig != null)
{
if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL.");
}
var request = filterContext.HttpContext.Request;
string url = null;
int sslPort;
if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0)
{
url = "https://" + request.Url.Host + request.RawUrl;
if (sslPort != 443)
{
var builder = new UriBuilder(url) { Port = sslPort };
url = builder.Uri.ToString();
}
}
if (sslPort != request.Url.Port)
{
filterContext.Result = new RedirectResult(url);
}
}
}
}
를 넣고 작업 결과 이상이 [RequireHttpsConditional]
를 사용하여 조건부 기능을 사용하는 것을 선호합니다.
나는이 코드를 인터넷 어딘가에 가지고있어 잘 작동하고있다. 의 web.config appSettings는에
는 <add key="UseSSL" value="443" />
하고 마우스 오른쪽 버튼을 클릭 한 다음 "을 바인딩 편집"을 클릭하여 프로젝트를 IIS에서
[RequireHttpsConditional]
public ActionResult SignIn()
{
}
를 넣어 필요 조치 결과 위의 컨트롤러에서 사용 사용자 정의 유형 https 및 포트 번호 443을 추가하십시오 (변경할 수 있음)
프로덕션 환경에서만 작동합니다. 로컬에서 실행될 때 작동하지 않을 것입니다.
로컬에서 실행하면 request.Url.Host
이 표시되어 localhost
만 반환되며 포트 번호가 누락됩니다. MVC에서이 코드를 사용하면 페이지를로드 할 때이 코드를 넣는 페이지를 찾을 수 있습니다.
특정 포트 번호로 localhost를 사용하는 대신 호스트를 할당하면이 방법이 유용합니다.
[HTTP에서 HTTPS 로의 리디렉션 방법 (IIS7.5)] (http://stackoverflow.com/questions/4945883/how-to-redirect-http-to-https-of-mvc) -application-iis7-5) – SilverlightFox
내 사이트의 일부 페이지를 리디렉션하고 싶습니다. 모든 페이지 또는 전체 사이트가 아닙니다. –