asp.net - 如何获取站点根 URL?

标签 asp.net

我想动态获取 ASP.NET 应用程序的绝对根 URL。这需要是应用程序的完整根 url,格式为:http(s)://hostname(:port)/

我一直在使用这种静态方法:

public static string GetSiteRootUrl()
{
    string protocol;

    if (HttpContext.Current.Request.IsSecureConnection)
        protocol = "https";
    else
        protocol = "http";

    StringBuilder uri = new StringBuilder(protocol + "://");

    string hostname = HttpContext.Current.Request.Url.Host;

    uri.Append(hostname);

    int port = HttpContext.Current.Request.Url.Port;

    if (port != 80 && port != 443)
    {
        uri.Append(":");
        uri.Append(port.ToString());
    }

    return uri.ToString();
}

但是,如果我没有 HttpContext.Current 怎么办?在适用范围?
我在 CacheItemRemovedCallback 遇到过这种情况.

最佳答案

对于 WebForms,此代码将返回应用程序根目录的绝对路径,无论应用程序是如何嵌套的:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + ResolveUrl("~/")

上面的第一部分返回应用程序的方案和域名( http://localhost ),没有尾部斜杠。 ResolveUrl代码返回应用程序根目录的相对路径 ( /MyApplicationRoot/ )。通过将它们组合在一起,您可以获得 Web 表单应用程序的绝对路径。

使用MVC:
HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~/")

或者,如果您尝试直接在 Razor View 中使用它:
@HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")

关于asp.net - 如何获取站点根 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853294/

相关文章:

c# - 有条件地显示ModalPopupExtender AJAX

c# - WebClient.DownloadFileAsync - 一次下载一个文件

c# - Asp.net ConnectionString 以安全的方式

mysql - ASP.NET MVC Razor,使用 url/profile/{username} 生成配置文件

ASP.NET 数据缓存?内存缓存等价物

asp.net - 将下一年/上一年按钮添加到asp日历控件

asp.net - 关闭 View 状态标签上的斜线?

asp.net - .NET MVC-4 路由与自定义 slug

c# - 从背后的 ASP.NET 代码中与 iFrame 对话

javascript - iframe单击“制作div”显示“隐藏”