关于c#:Asp.Net URL的绝对路径

Asp.Net Absolute Path of a URL

为了使webapp与其他服务器上的其他应用程序共享文件更简单,我在主页面中使用了一个base href标记。正如许多人所发现的,这会破坏webform路径。我有一个工作表单适配器类,但不确定如何获取URL的绝对路径。目前,我的程序是硬编码的,使用类似于:

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

值得注意的是,我目前正在本地IIS服务器上进行测试,因此我尝试使用的很多东西都有一种奇怪的趋势,即绝对路径不包括域名(我的本地IIS在外部不可见)。这意味着它不是一条绝对路径,因此基Href会破坏它。

有没有一个好的方法来处理这个问题,这样它就可以在本地工作而不需要硬编码,但在上传到服务器时也可以正常工作?我宁愿避免任何涉及在服务器端拷贝上执行不同操作的操作。

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


我以前用过这个:

1
2
3
4
5
6
// 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;

这是另一个稍微不那么冗长的方法

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


我使用了following,它对我的客户机和服务器都有效。

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

代码:

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