Домашняя страница маршрутизации Webform в папке типа mvc, а не в корне сайта - PullRequest
2 голосов
/ 18 августа 2010

У меня есть настройка маршрутизации веб-формы в моем проекте asp.net webforms 3.5sp1.Я хотел бы, чтобы файлы для сайта находились в каталоге с названием content, включая домашнюю страницу, поскольку я хотел бы запускать несколько сайтов, используя одну и ту же систему.

В MVC есть пустая страница по умолчанию и домашняя страницанаходится в папке с именем дома.Я не могу воспроизвести это поведение с помощью маршрутизации веб-формы, но хотел бы.Пустая страница всегда попадает первой.обработчик маршрута нажимается вторым - он распознает, что запрос относится к домашней странице, и устанавливает страницу маршрутизации, но не используется.код обработчика маршрута прост:

    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 голосов
/ 30 августа 2010

хорошо, у меня все получилось!момент.

Я нашел эту ссылку при поиске:

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

Все, что мне нужно было сделать, это оставить маршрут пустым и удалить файл default.aspx изкорень сайта.

Я также скопировал в system.webserver bis по умолчанию из нового проекта MVC, так как считаю, что то, что у меня там было, было неправильно.Я обновляю старый проект и думаю, что он не настроен на 100%.в частности: отсутствовал.

0 голосов
/ 26 августа 2010

В моем проекте мне нужно было перенаправить все вызовы, такие как 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
        }
    }

Незначительная проблема была связана с IIS хостера, поскольку мне не удалось настроить его для обработки всех запросов с использованием ASP.NET. Поэтому мне пришлось создавать пустые файлы-заполнители .aspx для страниц (например, www.site.com/MyPage/default.aspx), которые создаются динамически при запуске приложения, если оно работает под управлением IIS.

String server = Context.Request.ServerVariables["SERVER_SOFTWARE"]; 
// IIS puts some stuff here, WebDev server leaves the field empty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...