2009-02-19 213 views
47

为了让webapp更容易与另一个服务器上的另一个应用程序共享文件,我在母版页中使用了基本href标记。正如很多人发现的那样,这会打破webform路径。我有一个工作的表单适配器类,但不知道如何获得该网址的绝对路径。目前,我的计划是硬编码使用一个类似于:Asp.Net URL的绝对路径

HttpContext Context = HttpContext.Current; 
value = "http://localhost" + Context.Request.RawUrl; 

值得一提的是,我目前正在测试我的本地IIS服务器上,所以有对很多事情我已经尝试使用一种奇怪的倾向为了绝对路径不包括域名(我的本地IIS在外部不可见)。这意味着它不是一个绝对路径,因此基础href将破坏它。

有没有一种很好的方式来处理这个问题,它可以在没有硬编码的情况下在本地工作,但在上传到服务器时也能正常工作?我宁愿避免任何涉及在服务器端副本上做不同的事情。

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

+0

我不确定,但是,你是否尝试过Request.Url.Host? – 2009-02-19 22:53:08

回答

108

我已经在过去使用这样的:

// 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; 
-9

代码:

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

将密码放入URL中是非常糟糕的事情。不要这样做。 – 2014-12-19 16:10:27

2

老的文章,但这里是另一个稍微更简洁的方法

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

我用以下和它适用于我的客户端和服务器。

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