我需要从请求中获取域名和路径以提供以下返回值:
domain1.com/default.aspx returns domain1.com/default.aspx
domain1.com/ returns domain1.com/
domain1.com returns domain1.com
目前,无论浏览器中的地址栏显示什么,我尝试的每个网址提取功能似乎都会返回domain.com/default.aspx
。任何解决方案?
我尝试了很多不同的内置函数来检索部分请求,但似乎都没有提供所需的结果。
答案 0 :(得分:1)
您的问题有解决方案。
HttpContext.Current.Request.Url
将返回一个Uri
对象,其中包含为您细分的网址的所有部分。从那以后,你应该能够得到你想要的东西。具体来说,您想要的属性是Uri.Authority。
编辑:尝试这样的事情:
public static string GetPath(this HttpRequest request)
{
var authority = request.Url.Authority;
var pathAndQuery = request.Url.PathAndQuery;
var query = request.Url.Query;
var path = pathAndQuery.Substring(0,
pathAndQuery.Length - query.Length));
if (!authority.EndsWith("/"))
authority += "/";
return authority + path;
}
答案 1 :(得分:0)
您可能希望IIS中有一个网站,其中包含多个绑定/主机标头,并从默认文档中删除 default.aspx 。您应该然后能够使用urlMappings
配置元素来促进重定向。如果您需要有关urlMappings的更多信息,请查看以下链接:http://dotnetperls.com/urlmappings-aspnet
答案 2 :(得分:0)
您可以为每个域创建一个HttpModule - 实现Application_BeginRequest事件,如下所示:
private void Application_BeginRequest(object source, EventArgs e)
{
// get context and file path
HttpContext context = ((HttpApplication)source).Context;
string filePath = context.Request.FilePath;
if (filePath.Equals("/"))
{
// redirect to products page
context.Response.Redirect(filePath + "products.aspx");
}
}
这应该将http://www.domain1.com/重定向到http://www.domain1.com/products.aspx - http://www.domain1.com/default.aspx的请求不应重定向。
答案 3 :(得分:-1)
请在IIS中提供默认文档,它将以您想要的相同方式工作。因此,您可以在products.aspx
的默认文档中设置domain1.com
,然后在domain2.com
中设置categories.aspx
并将其全部设置。