Рабочий раствор - вставить строку перед Url.Content / UrlHelper.GenerateContentUrl (лучшее место в Application_BeginRequest):
System.Web.HttpContext.Current.Items.Add("IIS_WasUrlRewritten", "false");
Мой ответ - результат 2 приведенных выше ответов(Рик Шотт и Том).Оба были совершенно правы, но это не помогло.Я узнал исходный код в https://github.com/aspnet/AspNetWebStack/blob/master/src/ двух классов (System.Web.WebPages.Utils.UrlRewriterHelper.cs и System.Web.WebPages.Utils.UrlUtil.cs), которые находятся в моей трассировке стека:
System.Web.HttpException (0x80004005): Cannot use a leading .. to exit above the top directory.
at System.Web.Util.UrlPath.ReduceVirtualPath(String path)
at System.Web.Util.UrlPath.Reduce(String path)
at System.Web.VirtualPath.Combine(VirtualPath relativePath)
at System.Web.VirtualPathUtility.Combine(String basePath, String relativePath)
at System.Web.WebPages.UrlUtil.GenerateClientUrlInternal(HttpContextBase httpContext, String contentPath)
at System.Web.WebPages.UrlUtil.GenerateClientUrlInternal(HttpContextBase httpContext, String contentPath)
at System.Web.WebPages.UrlUtil.GenerateClientUrl(HttpContextBase httpContext, String basePath, String path, Object[] pathParts)
В System.Web.WebPages.Utils.UrlUtil.cs есть код - метод GenerateClientUrlInternal:
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;
Вы можете увидеть странные строки с комментариями автора для переписанных путей URL.Кроме того, исходный путь клиента находится в HttpContext.Request.RawUrl, но в URL он переписан.Посмотрите вперед на System.Web.WebPages.Utils.UrlRewriterHelper.cs:
if (httpContext.Items.Contains(UrlWasRewrittenServerVar))
{
return Object.Equals(httpContext.Items[UrlWasRewrittenServerVar], UrlWasRequestRewrittenTrueValue);
}
else
{
HttpWorkerRequest httpWorkerRequest = (HttpWorkerRequest)httpContext.GetService(typeof(HttpWorkerRequest));
bool requestWasRewritten = (httpWorkerRequest != null && httpWorkerRequest.GetServerVariable(UrlWasRewrittenServerVar) != null);
if (requestWasRewritten)
{
httpContext.Items.Add(UrlWasRewrittenServerVar, UrlWasRequestRewrittenTrueValue);
}
else
{
httpContext.Items.Add(UrlWasRewrittenServerVar, UrlWasRequestRewrittenFalseValue);
}
return requestWasRewritten;
}
Если мы записываем фиктивное значение в HttpContext.Items [UrlWasRewrittenServerVar] со значением «false», мы создаем пропущенный httpWorkerRequest.GetSertenRaviableRiable ()! = нулевая проверка.Итак, Url.Content сейчас работает.