2014-09-04 2 views
2

로컬 서버에서 작업 중이며 나머지는 HTTP를 통해 HTTPS를 통해 액세스하려면 특정 URL이 필요합니다. HTTP/SSL을 사용할 수 있도록 IIS Express를 사용하도록 Visual Studio를 구성했습니다.Request.Url.Scheme이 HTTPS를 반환하지 않는 이유는 무엇입니까?

내가하는 방법과 같이 있습니다 : 다른 장소에서

[RequireHttps] 
public ActionResult SomeHttpsMethod() 
{ 
    //Do something 
} 

내가 가진 :

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", new { someParams }, Request.Url.Scheme); 

내가 HTTPhttp://localhost:httpport를 사용하여 내 사이트에 액세스하는 경우, 나는 아직도 HTTP 대신의 Request.Url.Scheme에서 반환받을 HTTPS. 그게 작동하는 방법인가요?

내 사이트 즉 https://localhost:sslport으로 한 beging하는 즉 HTTPS를 사용 accesss 분명히 경우, HTTPS가 (내가 원하는이다) 반환하지만 해당 특정 URL에 대한, HTTPS의 사이트에 액세스하고 싶지 않아/제어기 방법.

+1

이것은 'Request.Url.Scheme'이 * http * 인 * 현재 요청 *의 체계이기 때문에 발생합니다. – Matthew

답변

4

이 줄 :

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", 
    new { someParams }, Request.Url.Scheme); 

는 HTTP 당신의 현재 요청의 방식을 기반으로 URL을 생성합니다. Request은 항상 현재 요청을 참조합니다. 내 경우

var url = Url.Action("SomeHttpsMethod", "SomeHttpsController", 
    new { someParams }, "https"); 
+0

그래, 올바른 프로토콜을 반환합니다. 항구는 어떻게됩니까? ''https : // localhost : 44300/somehttpsmethod''가되어야하기 때문에 연결이 안되는 URL 인'''https : // localhost/somehttpsmethod''를 리턴합니다. –

+0

이것은 IIS Express가 분리되는 곳입니다. 훨씬 강력하고 표준 포트 (80 및 443)를 사용하는 IIS로 전환하는 것이 가장 좋습니다. – Haney

+0

나는 본다. 따라서 위의 코드는 유효한 SSL 인증서가있는 IIS에서 제대로 작동합니까? –

0

가 다운 된 심하게 ARR에 규칙을 설정 : 당신은 항상 어쨌든 안전을 원하기 때문에

이 자리에서 "HTTPS"을 하드 코딩 더 나을 것 섬기는 사람. HTTPS가 아닌 HTTP를 얻는 것만 봐도 알 수 있습니다.

+1

ARR이란 무엇입니까? 고급 약어는 문제와 해결책을 설명하기위한 사이트의 답변에 도움이되지 않습니다. – melwil

관련 문제