获取ASP.Net MVC中任何文件的完整URL

Gau*_*ain 29 asp.net-mvc asp.net-mvc-routing

我想在MVC中生成任何文件的完整Url(带域名等).示例:.jpg文件或exe文件.

示例:如果我提供"〜/ images/abc.jpg",则应返回" http://www.mywebsite.com/images/abc.jpg "

我知道Url.Action将协议作为参数的重载.但是Url.Action只能用于Actions.

我想要一些像Url.Content协议作为参数的功能.

你知道是否有任何方法来获取任何文件的完整URL?

我曾尝试:VirtualPathUtility.ToAbsolute,ResolveClientUrl,ResolveUrl但所有这些似乎并不管用.

arn*_*rni 58

new Uri(Request.Url, Url.Content("~/images/image1.gif"))
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案!! 它很简单,默认情况下由NET完成,因此它在灵活性和可维护性方面是最好的 (3认同)

Ade*_*eel 49

您可以使用以下代码将"〜/"替换为absoulute URL.

System.Web.VirtualPathUtility.ToAbsolute("~/")
Run Code Online (Sandbox Code Playgroud)

编辑:

首先,您需要定义一个方法.

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;
} 
Run Code Online (Sandbox Code Playgroud)

现在调用此方法将返回完整的absolure url.

ResolveServerUrl(VirtualPathUtility.ToAbsolute("~/images/image1.gif"),false))
Run Code Online (Sandbox Code Playgroud)

输出将是 http://www.yourdomainname.com/images/image1.gif

  • 上面的代码返回"/".而已.不是像http:// www.mywebsite /这样的协议的域名 (2认同)