【问题标题】:Mixing ASP.NET MVC into ASP.NET WebForms将 ASP.NET MVC 混入 ASP.NET WebForms
【发布时间】:2010-12-18 21:09:40
【问题描述】:

由于某种原因,我的路由忽略了任何访问我的 MVC 页面的尝试,只是给了我 404。我有一个 WebForms 应用程序设置如下:

虚拟目录:东西

所以我通常这样访问我的网站:

我的 ASP.NET WebForms 应用程序的原始结构反映了文件系统,因此我有充满 .aspx 文件的文件夹,我需要能够像那样使用它们。出于某种原因,当我尝试使用 MVC 路由访问页面时,例如:

我刚刚收到 404 错误。我自己使用了 ASP.NET MVC,我知道即使我没有正确设置我的文件夹,我也不会得到 404。我会得到找不到页面的原因和提示文件应该在哪里。以下是我的路由信息​​。我哪里错了?

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    routes.MapRoute(
       "Default",
        // Route name
       "{controller}/{action}/{id}",
        // URL with parameters
       new { controller = "Home", action = "Index", id = "" }
        // Parameter defaults
     );
}

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
}

【问题讨论】:

    标签: asp.net asp.net-mvc iis asp.net-mvc-routing


    【解决方案1】:

    你能告诉我你在什么操作系统上运行,这个网站是在 VS.NET Web Dev 服务器还是 IIS 下运行?

    MVC 中的路由将请求定向到 Controller 类,然后定向到特定的 Action 方法。你有一个名为 HomeController 的类和一个名为 Index 的方法吗?

    假设您有一个看起来像这样的控制器......

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    

    ...那么您提到的网址应该可以工作。但是,ASP.NET MVC 将期望在您的 vdir 下名为 Views\Home 或 Views\Shared 的文件夹中找到与 Home 控制器关联的任何视图。在这种情况下,对于 Index 操作,它将期望找到一个名为 Index.aspx(或 .ascx)的视图。但是,缺少的视图通常不会导致 404 - 这通常是由于未找到控制器、未找到操作方法或在 IIS 6 上 asp.net 管道不在 vdir 的通配符设置中引起的。

    更新:

    你确定你的 web.config 有 MVC HttpHandler(这样 MVC 就在 ASP.NET 管道中)。你应该有这样的东西......

    <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    

    ...在您的httpHandlers 部分和这个...

    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    

    ...在 web.config 的“httpModules”部分中。

    更新 2:

    根据您的 cmets,我怀疑您在管道中没有 ASP.NET MVC 代码。您应该获取您的 web.config 并将其与新创建的 MVC 站点中的一个进行比较,并查找缺少的配置项。我在上面推荐了几个,但可能还有更多。

    【讨论】:

    • Windows 7 x64 - II7.5 - 站点在 IIS 下运行。我有约定。一个名为 HomeController 的控制器,带有一个 Index() 方法。我在 Views/Home/ 中也有一个名为 Index 的视图。
    • 即使我没有适当的控制器和视图,我也不会得到 404,我会得到路由失败的原因。这让我相信路由搞砸了。
    • 你遇到断点了吗?事件查看器中的异常?
    • 我使用的是经典的 .NET AppPool。我认为这与我的问题有关,但仍不能 100% 确定。
    • 这被标记为答案 - 但不清楚答案是什么!我也有同样的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2010-10-14
    • 2011-02-20
    相关资源
    最近更新 更多