MVC5路由到404

时间:2014-09-29 19:15:45

标签: razor visual-studio-2013 asp.net-mvc-5

我有一个遗留的WebForms网站,我试图添加新的MVC 5页面。

我正在运行VS Express 2013 / IISExpress

我已按照这些页面的说明进行操作:

http://www.codeproject.com/Articles/38778/ASP-NET-WebForms-and-ASP-NET-MVC-in-Harmony https://www.simple-talk.com/dotnet/asp.net/mixing-web-forms-and-asp.net-mvc/ http://www.asp.net/mvc/tutorials/mvc-5/introduction/adding-a-view

我在项目中运行了“管理NuGet包”并安装了ASP.NET MVC和所有依赖项。

我添加了对System.Web.Routing,System.Web.Mvc和System.Web.Razor的引用,创建了一个基本的View和Controller。

一切都在建立和运行。

我可以在应用程序启动时设置断点并查看我的路由是如下创建的:

    private void RegisterRoutes(RouteCollection routes)
    {
        routes.MapHttpRoute(
            "AdminPages",
            "Admin/{controller}",
            new { controller = "Dashboard" }
            );
    }

我尝试添加属性路由,如下所述:

http://www.dotnet-tricks.com/Tutorial/mvc/4PK4010514-Understanding-Attribute-Routing-in-ASP.NET-MVC.html

控制器:

 namespace ConnectBusiness.Controllers
 {
     [RoutePrefix("Admin")]
     [Route("{action=index}")]
     public class DashboardController : Controller
     {

         // Dashboard/Index
         public ActionResult Index()
         {
             return View();
             //return View("~/MVC5/Views/Administration/Dashboard.cshtml");
         }
     }
 }

Web.config具有以下处理程序:

  <remove name="ExtensionlessUrlHandler-Integrated-4.0" /><remove name="OPTIONSVerbHandler" /><remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

但是当我尝试导航到我认为正确的URL时,我总是被重定向到default.aspx,结果是404:

http: //localhost:57330/Admin/Dashboard --> http: //localhost:57330/Admin/Dashboard/default.aspx --> 404

有什么想法导致404重定向以及如何成功导航到我的控制器?

2 个答案:

答案 0 :(得分:0)

  1. 您是否在Views / Dashboard / index.cshtml中有索引视图?如果您点击了索引操作,那将是它要查找的文件。

  2. 您是否启用了属性路由?确保在基于约定的路由之前启用它,以便它首先匹配属性路由。

     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
         //enabling attribute routing
         routes.MapMvcAttributeRoutes();
    
         //convention-based routing
         /routes.MapRoute(
         name: "Default",
         url: "{controller}/{action}/{id}",
         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
     }
    
  3. 如果您希望网址为 localhost:57330 / Admin / Dashboard ,请尝试以下操作:

    [RoutePrefix("Admin")]
    [Route("{action=index}")]  //default action
    public class DashboardController : Controller
    {
    
       // route: /Admin/Dashboard
       [Route("Dashboard")]
       public ActionResult Index()
       {
           return View();
       }
    }
    

    你设置它的方式我认为URL将是 localhost:57330 / Admin localhost:57330 / Admin / Index

答案 1 :(得分:0)

这是由配置中安装的UrlRewritingNet(http://www.urlrewriting.net)引起的。

获得的经验:删除其他Url重写器并让MVC处理url重写。