Добавление WebForm в приложение MVC для работы с расширением без веб-страницы - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение MVC, в которое я должен интегрировать несколько страниц веб-форм.

Я просто добавил веб-форму "WebForm.aspx" в корневой каталог, и она работала без каких-либо проблем, когда я обращался к веб-форме с расширением файла http://localhost:54363/WebForm.aspx, но те же файлы не работают, когда я пытаюсь получить к нему доступ без расширения файла .aspx

http://localhost:54363/WebForm для этого получим 404 error.

Чтобы это работало, я внес изменения в файл Global.asax согласно этой статье , но он не работал

Ниже приведен код файла Global.asax

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace ProjectNameSpace
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }


        public static void RegisterRoutes(RouteCollection routes)
        {

            routes.RouteExistingFiles = true;
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("Content/{*pathInfo}");
            routes.IgnoreRoute("Scripts/{*pathInfo}");
            routes.IgnoreRoute("{WebPage}.aspx/{*pathInfo}");
            routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");


            //routes.MapRoute(
            //    "Default", // Route name
            //    "{controller}/{action}/{id}", // URL with parameters
            //    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            //);

            routes.MapPageRoute("home", "WebForm/", "~/WebForm.aspx", false,
                new RouteValueDictionary {
                        { "path", "page-not-found" },{ "pagename", "page-not-found" }
                    });

        }
    }


}

Что-то не так в приведенном выше коде или как правильно настроить маршрут для файла WebForm.aspx.

UPDATE:

Мне удалось решить эту проблему, добавив код маршрута веб-формы также в файле RouteConfig.cs также

using AlhabtoorTennisAcademy.CustomFilters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace ProjectNameSpace
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // webforms page route
            //Custom route code for webform
            routes.MapPageRoute("home", "WebForm", "~/WebForm.aspx", false,
              new RouteValueDictionary {
            { "path", "page-not-found" },{ "pagename", "page-not-found" }
            });
}
}
........

1 Ответ

0 голосов
/ 15 января 2019

Из того, что я вижу в примере выше, вы добавляете MapPageRoute после маршрутизации MVC по умолчанию с MapRoute, следовательно, порядок MapPageRoute обрабатывается после MapRoute, что неверно, поскольку обрабатываются маршруты от самого верхнего до самого нижнего порядка (от наиболее специфического к наименее специфическому).

Чтобы маршрутизировать страницы веб-форм, MapPageRoute должен предшествовать MapRoute в верхнем порядке:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("Content/{*pathInfo}");
    routes.IgnoreRoute("Scripts/{*pathInfo}");
    routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");

    // webforms page route
    routes.MapPageRoute("home", "WebForm", "~/WebForm.aspx", false,
        new RouteValueDictionary {
        { "path", "page-not-found" },{ "pagename", "page-not-found" }
    });

    // default MVC route
    routes.MapRoute(
       "Default", // Route name
       "{controller}/{action}/{id}", // URL with parameters
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

Дополнительное примечание:

Вы можете использовать заполнитель для имен страниц, чтобы отобразить все страницы веб-форм в одном MapPageRoute определении:

routes.MapPageRoute("home", "{WebPage}", "~/{WebPage}.aspx");

Похожие проблемы:

URL-маршрутизация C # mvc и веб-форм

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...