Webform路由主页在mvc而不是站点根目录的文件夹中

时间:2010-08-18 09:25:36

标签: c# asp.net asp.net-mvc routing webforms

我的asp.net webforms 3.5sp1项目上有webform路由设置。我想将这个站点的文件放在一个名为content的目录中,包括主页,因为我想使用同一个系统运行多个站点。

在MVC中,有一个空白的默认页面,主页位于名为home的文件夹中。我似乎无法使用Web表单路由复制此行为,但我想。始终首先点击空白页面。第二次命中路由处理程序 - 它识别该请求是针对主页并设置路由页面但未使用。路由处理程序代码很简单:

    public string VirtualPath { get; private set; }

    public IHttpHandler GetHttpHandler(RequestContext
          requestContext)
    {
        string file = requestContext.RouteData.GetRequiredString("File");
        string id = requestContext.RouteData.GetRequiredString("Id");
        string queryString = "?menuid=" + id;
        VirtualPath = "~/" + file;
        HttpContext.Current.RewritePath(
          string.Concat(
          VirtualPath,
          queryString));

        var page = BuildManager.CreateInstanceFromVirtualPath
             (VirtualPath, typeof(Page)) as IHttpHandler;
        return page;
    }

无论如何我能做到吗?

更新 这是我的global.asax路由代码:

    public static void RegisterRoutes(RouteCollection routes)
    {
        Domain.RepositoryFactory repo = new RepositoryFactory();
        foreach (var x in repo.MenuRepository.GetAllEnabledGetMenus())
        {
            if (string.IsNullOrEmpty(x.Url))
            {
                //add default
                System.Web.Routing.RouteTable.Routes.Add(
                    new Route("Default.aspx", 
                        new RouteValueDictionary(new { File = x.FileName, 
                                                      Id = x.Id.ToString() }),
                              new CoreRouteHandler()));
            }
            else
            {
                string url = x.Url;
                if(x.Url.StartsWith("/"))
                {
                    url = url.Remove(0, 1);
                }
                System.Web.Routing.RouteTable.Routes.Add(
                    new System.Web.Routing.Route(url,
                        new RouteValueDictionary(new {File = x.FileName,
                                                      Id = x.Id.ToString()}),
                          new CoreRouteHandler()));
            }

        }

    }

2 个答案:

答案 0 :(得分:0)

在我的项目中,我需要将所有调用重定向到www.site.com/MyPage到/Pages/MyPage.aspx。是通过使用HttpModule完成的。示例代码如下:

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;

        if (app.Context == null || app.Context.Response == null)
            return;

        String sourceUrl = String.Empty;
        try
        {
            sourceUrl = app.Request.FilePath.TrimStart('/').TrimEnd('/').ToLower();
            if (global::MyProject.Global.UrlShortcuts.ContainsKey(sourceUrl))
            {
                String newUrl = global::MyProject.Global.UrlShortcuts[sourceUrl];
                app.Context.RewritePath(newUrl, string.Empty, app.Request.QueryString.ToString(), false);
                                }
            else
            {
            }
        }
        catch (Exception Ex)
        {
            // handle your exception here
        }
    }

小问题是与hoster的IIS有关,因为我无法将其配置为使用ASP.NET处理所有请求。因此,如果它在IIS下运行,我必须为应用程序启动时动态创建的页面(例如www.site.com/MyPage/default.aspx)提供空白占位符.aspx文件。

String server = Context.Request.ServerVariables["SERVER_SOFTWARE"]; 
// IIS puts some stuff here, WebDev server leaves the field empty

答案 1 :(得分:0)

好吧,我让它有点干嘛!时刻。

我在谷歌搜索时找到了这个链接:

http://blog.ysatech.com/post/2010/07/11/ASP-NET-4-URL-Routing-Default-Page.aspx

我需要做的就是将路径留空并从站点的根目录中删除default.aspx文件。

我还从一个新的MVC项目复制了默认的system.webserver bis,因为我觉得我在那里做的不对。我正在升级一个旧项目,所以认为它没有100%配置。具体来说:失踪了。