出于某种原因,我的路由忽略了任何访问我的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);
}
答案 0 :(得分:2)
您能告诉我您运行的是什么操作系统以及该网站是否在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的通配符设置中。 / p>
<强>更新强>
您确定您的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:
根据您的评论我怀疑您没有在管道中获得ASP.NET MVC代码。您应该使用web.config并将其与新创建的MVC站点中的一个进行比较,并查找缺少的配置项。我上面提了几句,但可能会有更多。