Asp.net mvc 获取ASP.NETMVC中任何文件的完整url
我想在MVC中生成任何文件的完整Url(带有域名等)。示例:一个Asp.net mvc 获取ASP.NETMVC中任何文件的完整url,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我想在MVC中生成任何文件的完整Url(带有域名等)。示例:一个.jpg文件或一个exe文件 示例:如果我给“~/images/abc.jpg”,它应该返回“ 我知道将协议作为参数的Url.Action重载。但是Url.Action只能用于操作 我想要像Url.Content这样的函数,它将协议作为参数 您知道是否有任何方法可以获取任何文件的完整url 我尝试过:VirtualPathUtility.ToAbsolute,ResolveClientUrl,ResolveUrl,但所有这些似乎都不
.jpg
文件或一个exe
文件
示例:如果我给“~/images/abc.jpg”,它应该返回“
我知道将协议作为参数的Url.Action
重载。但是Url.Action
只能用于操作
我想要像Url.Content
这样的函数,它将协议作为参数
您知道是否有任何方法可以获取任何文件的完整url
我尝试过:
VirtualPathUtility.ToAbsolute
,ResolveClientUrl
,ResolveUrl
,但所有这些似乎都不起作用。您可以使用以下代码替换“~/”以消除URL
System.Web.VirtualPathUtility.ToAbsolute("~/")
编辑:
首先,您需要定义一个方法
public static string ResolveServerUrl(string serverUrl, bool forceHttps)
{
if (serverUrl.IndexOf("://") > -1)
return serverUrl;
string newUrl = serverUrl;
Uri originalUri = System.Web.HttpContext.Current.Request.Url;
newUrl = (forceHttps ? "https" : originalUri.Scheme) +
"://" + originalUri.Authority + newUrl;
return newUrl;
}
现在调用此方法将返回完整的absolure url
ResolveServerUrl(VirtualPathUtility.ToAbsolute("~/images/image1.gif"),false))
输出将为http://www.yourdomainname.com/images/image1.gif
尝试使用此选项
Url.Action("~/images/image1.gif", "/", null, Request.Url.Scheme)
上述代码返回“/”。就这样。不是像http://www.mywebsite/i这样的协议域名,我已经更新了答案。现在它将完全满足要求。添加字符串不是最干净的方式。您应该使用内置类,如Uri或UriBuilder.Excellent。我将您的代码与这里的答案结合起来,提供了一个
@Url.Absolute
扩展方法。ThanksOP谈到了与这个精确解决方案相关的问题。这个问题的正确答案是在3年前提出这个问题2小时后给出的……我不确定哪种方法最有效,但我发现这是最容易使用和记住的方法。这应该是答案!!它很简单,默认情况下是由网络完成的,因此它在灵活性和可维护性方面是最好的。它很漂亮,但对我来说不起作用。。我仍然得到类似于main/images/load.png
域丢失的东西。
new Uri(Request.Url, Url.Content("~/images/image1.gif"))