none
asp.net 4.0 路由及二级域名的问题 RRS feed

  • 问题

  • 我看了不少文章但没有系统解决我问题的思路,盼高手给予指点。

    我希望达到以下效果:

    输入jx.abc.com

    可以路由到www.abc.com/location.aspx?locid=1

    其中jx和locid中的1在数据库中有对应关系.

    输入jx.abc.com/house

    可以路由到www.abc.com/location.aspx?locid=1&catalogid=2

    其中house和catalogid中的2都有对应关系。

    现在,我不知道是不是一定要在域名管理中进行泛解析设置及在iis中要做什么设置。

    另外,在Application_Start中的RouteTable.Routes.MapPageRoute中该怎么写。谢谢。

    非并本人懒惰不愿意查资料,而实在是没有系统的文章可以解决我的问题,盼高手指点。。

     

    2011年4月10日 6:09

全部回复

  • 这个需要先把jx.abc.com解析到www.abc.com服务器的IP,如果服务器上有多个站点可能还需要设置主机头.

    代码部分可以参考一下http://www.cnblogs.com/JeffreyZhao/archive/2009/08/25/url-routing-with-domain.html


    本帖内容仅供参考,没有任何保证. This post is provided without any warranty.
    2011年4月17日 14:52
    版主
  • 重写httpmoudle或者httphandle都可以实现这种效果,截取要访问的地址到真实地址

    2011年4月18日 8:46
    版主
  • 你好:

    可以通过<httpModules>或<httpHandlers>节点来实现,如:

    在web.config中<httpModules>节点中增加 <add name="HttpModule" type="HttpModule"/>

    然后添加一个HttpModule类,让该类实现接口IHttpModule.

    public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);//定义开始请求时,执行的事件。
        }

        void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;

            //News_View_3.aspx
            //context.Response.Write(context.Request.FilePath);
            int i = context.Request.FilePath.LastIndexOf('/');
            string filename = context.Request.FilePath.Substring(i);
            //以上两段代码为 得到假的请求的文件名

            Regex regex = new Regex(@"View_(\d+).aspx"); //用正则来验证是否合理
            if (regex.IsMatch(filename))
            {
                Match match = regex.Match(filename);
                string id = match.Groups[1].Value; //用来得到正则组中的数字,也就是当前请求的ID值
                context.RewritePath("News_View.aspx?id=" + id); //将虚路径重写为新的正确的文件存在的路径,并指定其ID,也就是查询字符串
            }

     

    其中,你的需求改要更变正则表达式就可以了。

    2011年4月18日 16:17
  • 感谢回复。我希望使用asp.net的路由功能来做。

    但是asp.net本身不提供对子域名的支持。见过老外写的asp.net mvc的子域名的。但我是webform.

    2011年4月19日 11:33
  • MVC和WebForm都可以用路由的,只不过WebForm之前比较多的使用URL重写.
    本帖内容仅供参考,没有任何保证. This post is provided without any warranty.
    2011年4月19日 12:32
    版主
  • 先将域名做泛解析过去(*.abc.com ), 然后再context_BeginRequest中用正则去取二级域名部分,去到之后再来按照你的逻辑处理。
    2011年4月22日 6:54
    版主