이 확장 방법을 코드에 추가하십시오.
public static Uri UrlOriginal(this HttpRequestBase request)
{
string hostHeader = request.Headers["host"];
return new Uri(string.Format("{0}://{1}{2}",
request.Url.Scheme,
hostHeader,
request.RawUrl));
}
그런 다음 RequestContext.HttpContext.Request
속성에서 실행할 수 있습니다 .
로컬 웹 사이트에 포트 80 이외의 포트를 사용하는 컴퓨터에서 발생하는 버그 (아래 단계 참조, 아래 참조)가 있습니다 (내부 웹 사이트가 가상 IP에서로드 밸런싱을 통해 게시되는 경우 큰 문제) 포트는 내부적으로 규칙을 게시하는 데 사용됩니다. 따라서 Asp.Net은 AbsoluteUri
원래 요청 에서 포트를 사용하지 않더라도 항상 포트를 속성 에 추가 합니다.
이 코드는 로드 밸런싱 등이 발생하기 전에 반환 된 URL이 브라우저가 원래 요청한 URL (호스트 헤더에 포함 된 포트 포함) 과 항상 동일한 지 확인합니다 .
적어도, 그것은 (우리보다 복잡한) 환경에서 않습니다 :)
호스트 헤더를 다시 쓰는 사이에 펑키 프록시가 있으면 작동하지 않습니다.
2013 년 7 월 30 일 업데이트
아래 주석에서 @KevinJones가 언급했듯이 다음 섹션에서 언급 한 설정은 여기에 설명되어 있습니다. http://msdn.microsoft.com/en-us/library/hh975440.aspx
나는 그것을 시도했을 때 그것을 작동시킬 수 없다고 말해야하지만-오타 나 무언가를 만드는 것이 될 수 있습니다.
2012 년 7 월 9 일 업데이트
나는 얼마 전에 이것을 보았고이 답변을 업데이트하려고했지만 결코하지 않았습니다. upvote가 방금이 답변에 왔을 때 나는 지금해야한다고 생각했다.
Asp.Net에서 언급 한 '버그'는 문서화되지 않은 appSettings 값으로 제어 할 수 있습니다 'aspnet:UseHostHeaderForRequest'
.
<appSettings>
<add key="aspnet:UseHostHeaderForRequest" value="true" />
</appSettings>
보면서 나는이 건너 온 HttpRequest.Url
ILSpy에 -에 의해 표시 --->
에서 다음 사본의 왼쪽에 / 그 ILSpy보기에서 붙여 넣기 :
public Uri Url
{
get
{
if (this._url == null && this._wr != null)
{
string text = this.QueryStringText;
if (!string.IsNullOrEmpty(text))
{
text = "?" + HttpEncoder.CollapsePercentUFromStringInternal(text,
this.QueryStringEncoding);
}
---> if (AppSettings.UseHostHeaderForRequestUrl)
{
string knownRequestHeader = this._wr.GetKnownRequestHeader(28);
try
{
if (!string.IsNullOrEmpty(knownRequestHeader))
{
this._url = new Uri(string.Concat(new string[]
{
this._wr.GetProtocol(),
"://",
knownRequestHeader,
this.Path,
text
}));
}
}
catch (UriFormatException)
{ }
}
if (this._url == null) { /* build from server name and port */
...
나는 개인적으로 그것을 사용하지 않았습니다-그것은 문서화되지 않았고 따라서 붙어 있다고 보장하지는 않습니다-그러나 위에서 언급 한 것과 똑같은 일을 할 수 있습니다. 검색 결과의 관련성을 높이고이를 발견 한 것으로 보이는 다른 사람을 인정하기 위해 'aspnet:UseHostHeaderForRequest'
설정은 트위터의 Nick Aceves에 의해 언급되었습니다.