Добавление MVC4 в приложение Webforms - Маршрутизация не работает

Я пытаюсь добавить MVC 4 в существующий проект веб-форм. Я следовал этому руководству: https://www.packtpub.com/books/content/mixing-aspnet-webforms-and-aspnet-mvc

После добавления в web.config:

<add assembly="System.Core, Version=3.5.0.0, Culture=neutral,PublicKeyToken=B77A5C561934E089"/>
      <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Я сделал контроллер (HomeController.cs) в папке Controllers:

using System.Web.Mvc;

namespace MixingBothWorldsExample.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "This is ASP.NET MVC!";
            return View();
        }
    }
}

Затем я добавил свой вид в Views/Home/index.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs"    Inherits="MixingBothWorldsExample.Views.Home.Index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <div>
        <h1><%=Html.Encode(ViewData["Message"]) %></h1>
    </div>
</body>

Затем добавил мой маршрут:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}

public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    routes.MapRoute("Test", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}

По какой-то причине все в моем существующем проекте веб-форм работает нормально (включая PageRoutes), однако / home / index дает мне 404, подразумевая, что это даже не маршрутизация к контроллеру.

У кого-нибудь есть идеи?

4 ответа

Решение

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

Попробуй это,

public static void RegisterRoutes(System.Web.Routing.RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute("Test", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}

Я думаю, вам может понадобиться добавить параметр id в метод Index в HomeController. Хотя это и необязательно, маршрутизатор ищет метод, который принимает идентификатор.

Изменить: Извините, я не знаю, о чем я думал. Это неправильно, о чем свидетельствует статья, на которую вы ссылаетесь.

Можете ли вы попробовать следующие правила маршрутизации. Это работает для меня в проектах MVC4. Это определяет страницу по умолчанию, которая будет загружаться при переходе к некоторому URL и порту, например, locallhost:4897

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

   routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
   );
}
Другие вопросы по тегам