이이 http://domain.com/virtualdirectory/api/User
의 경로를 반환하여 IIS 웹 서버에 모듈을 다시 쓰기 IIS가의 소스 코드의 일부에 봐와 관련 @ Url.Content 아래 :
private static string GenerateClientUrlInternal(HttpContextBase httpContext, string contentPath)
{
if (String.IsNullOrEmpty(contentPath))
{
return contentPath;
}
// can't call VirtualPathUtility.IsAppRelative since it throws on some inputs
bool isAppRelative = contentPath[0] == '~';
if (isAppRelative)
{
string absoluteContentPath = VirtualPathUtility.ToAbsolute(contentPath, httpContext.Request.ApplicationPath);
return GenerateClientUrlInternal(httpContext, absoluteContentPath);
}
// we only want to manipulate the path if URL rewriting is active for this request, else we risk breaking the generated URL
bool wasRequestRewritten = _urlRewriterHelper.WasRequestRewritten(httpContext);
if (!wasRequestRewritten)
{
return contentPath;
}
// Since the rawUrl represents what the user sees in his browser, it is what we want to use as the base
// of our absolute paths. For example, consider mysite.example.com/foo, which is internally
// rewritten to content.example.com/mysite/foo. When we want to generate a link to ~/bar, we want to
// base it from/instead of /foo, otherwise the user ends up seeing mysite.example.com/foo/bar,
// which is incorrect.
string relativeUrlToDestination = MakeRelative(httpContext.Request.Path, contentPath);
string absoluteUrlToDestination = MakeAbsolute(httpContext.Request.RawUrl, relativeUrlToDestination);
return absoluteUrlToDestination;
}
또한
bool requestWasRewritten = (httpWorkerRequest != null && httpWorkerRequest.GetServerVariable("IIS_WasUrlRewritten") != null);
그리고 :
웹 서버가 URL을 다시 쓴가있는 여부를 확인하기 위해 아래의 코드를 사용
요약
private volatile bool _urlRewriterIsTurnedOnCalculated = false;
private bool _urlRewriterIsTurnedOnValue;
private object _lockObject = new object();
private bool IsUrlRewriterTurnedOn(HttpContextBase httpContext)
{
// Need to do double-check locking because a single instance of this class is shared in the entire app domain (see PathHelpers)
if (!_urlRewriterIsTurnedOnCalculated)
{
lock (_lockObject)
{
if (!_urlRewriterIsTurnedOnCalculated)
{
HttpWorkerRequest httpWorkerRequest = (HttpWorkerRequest)httpContext.GetService(typeof(HttpWorkerRequest));
//bool urlRewriterIsEnabled = (httpWorkerRequest != null && httpWorkerRequest.GetServerVariable(UrlRewriterEnabledServerVar) != null);
bool urlRewriterIsEnabled = (httpWorkerRequest != null && httpWorkerRequest.GetServerVariable("IIS_UrlRewriteModule") != null);
_urlRewriterIsTurnedOnValue = urlRewriterIsEnabled;
_urlRewriterIsTurnedOnCalculated = true;
}
}
}
return _urlRewriterIsTurnedOnValue;
}
, 웹 서버 중 하나를 의미 반환 사실 requestWasRewritten 및 IsUrlRewriterTurnedOn, 모두 IIS 재 작성 모듈 가 켜져 있고 다른 하나는없는 동안 실행되어있는 경우.
ASP.NET MVC 소스 코드에 대한 자세한 내용은
,이 링크를 참조하십시오
http://aspnetwebstack.codeplex.com/
는 희망이 도움이!
문서에서는 이것이 절대 경로를 생성한다고 말하지만 내부 구현이 클라이언트 측에서 올바르게 작동하는 URL을 반환합니다 ('PathHelpers.GenerateClientUrl'을 호출합니다). 두 번째 앱이 서버의 루트 또는 가상 디렉터리에 설치되어 있습니까? – JotaBe
둘 다 응용 프로그램으로 설치되며 해당 AppPool 및 사용 권한은 모두 동일합니다. – Salman