假设我有以下网址的请求: 的 foo.bar.com/do/something
“do”控制器的“something”操作返回一个视图,其中包含具有以下URL的图像: foo.bar.com/content/image.png (由帮助程序生成< strong> Url.Content ) - 这只是一个例子,我的实际页面有很多图片
我想知道在操作中我可以做些什么来改变 Url.Content 的行为,以便它使用网址 localhost / content / image.png生成我的图片网址
答案 0 :(得分:2)
这可能不是最佳解决方案,但它可能适合您:
您可以编写如下所示的扩展程序来实现此目的:
// Determine if gen localhost or the normal hostname
public static bool IsUseLocalhost { get; set; }
public static string ContentFullPath(this UrlHelper url
, string virtualPath, string schema = "", string host = "")
{
var result = string.Empty;
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
if (string.IsNullOrEmpty(schema))
{
schema = requestUrl.Scheme;
}
if (string.IsNullOrEmpty(host))
{
if (IsUseLocalhost)
{
host = "localhost";
}
else
{
host = requestUrl.Authority;
}
}
result = string.Format("{0}://{1}{2}",
schema,
host,
VirtualPathUtility.ToAbsolute(virtualPath));
return result;
}
在Action中,您可以将静态IsUseLocalhost
设置为true
以使用localhost转换所有gen url。
然后在视图中使用它:
@Url.ContentFullPath("~/content/image.png")
如果要设置explicity主机,则在视图中将其用作:
@Url.ContentFullPath("~/content/image.png", host: "localhost")