Asp.Net URL的绝对路径

49
为了让一个Web应用能够更简单地与不同服务器上的另一个应用程序共享文件,我在我的主页面中使用了基本href标签。如许多人所发现的那样,这会破坏Web表单路径。我有一个可用的表单适配器类,但不确定如何获取URL的绝对路径。目前,我的程序是硬编码为使用类似于以下内容:
HttpContext Context = HttpContext.Current;
value = "http://localhost" + Context.Request.RawUrl;

值得注意的是,我目前正在本地的IIS服务器上进行测试,因此许多我尝试使用的东西倾向于不包括域名的绝对路径(我的本地IIS在外部不可见)。这意味着它不是绝对路径,因此基础href将破坏它。

有没有一种好的方法来处理这个问题,使其在本地工作时不需要硬编码,但上传到服务器后也能正常工作?我希望避免在服务器端副本上执行任何不同的操作。

是的,我意识到我可以在本地和服务器上使用单独的web.config文件来获取这些信息,但这很丑陋并且违反了DRY原则。


不确定,但是您尝试过 Request.Url.Host 吗? - Barbaros Alp
5个回答

113

我以前使用过这个:

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath"
HttpContext.Current.Request.Url.Scheme 
    + "://"
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath;

4

虽然这篇文章有些旧,但是这里提供了一个更简洁的方法:

var baseUri = new Uri(HttpContext.Current.Request.Url, "/");

1
使用字符串插值:
string redirectUri = $"{this.Request.Url.Scheme}://{this.Request.Url.Authority}{this.Request.ApplicationPath}account/signedout";

根据上下文,将“HttpContext”或“HttpContext.Current”替换为“this”。


0

我已经使用了以下代码,在客户端和服务器端都可以正常工作。

string surl = string.Format("{0}://{1}",
    HttpContext.Current.Request.Url.Scheme,
    HttpContext.Current.Request.Url.Authority);

-9

代码:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"];

7
将密码放在URL中是非常糟糕的行为,请勿这样做。 - Edward Olamisan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接