使用ASP.net检索域名和路径

时间:2010-10-19 13:48:59

标签: asp.net redirect domain-driven-design dns

我需要从请求中获取域名和路径以提供以下返回值:

domain1.com/default.aspx    returns      domain1.com/default.aspx
domain1.com/                returns      domain1.com/
domain1.com                 returns      domain1.com

目前,无论浏览器中的地址栏显示什么,我尝试的每个网址提取功能似乎都会返回domain.com/default.aspx。任何解决方案?

我尝试了很多不同的内置函数来检索部分请求,但似乎都没有提供所需的结果。

4 个答案:

答案 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并将其全部设置。