Asp.net mvc 获取ASP.NETMVC中任何文件的完整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,但所有这些似乎都不

我想在MVC中生成任何文件的完整Url(带有域名等)。示例:一个
.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"))