You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在ASP.NET MVC项目中配置路由(含Web.config配置)

配置ASP.NET MVC路由的完整指南(针对VS2017空项目)

看起来你已经迈出了配置路由的第一步,不过你的RouteConfig.cs代码好像没写完,我来帮你补全并梳理完整的配置流程,让你的路由能正常工作。

首先,先把你的RouteConfig.cs补全成标准的MVC路由配置:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;

namespace WebApplicationBS_Web
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            // 忽略对.axd类资源文件的路由解析(避免干扰静态资源访问)
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            
            // 定义默认路由规则
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

接下来,你需要在项目的Global.asax.cs里注册这个路由配置(如果你的空项目没有这个文件,右键项目→添加→新建项→选择「全局应用程序类」即可):

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

namespace WebApplicationBS_Web
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            // 若项目使用了区域功能,可保留这行;没有的话可以注释掉
            AreaRegistration.RegisterAllAreas();
            
            // 注册我们编写的路由配置
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }
    }
}

最后给你几个新手必知的关键点:

  • routes.IgnoreRoute:这条规则让ASP.NET跳过对特定静态资源的路由解析,避免不必要的性能消耗或访问错误。
  • 默认路由的url模板:{controller}/{action}/{id}是MVC的标准路由结构,比如访问/Home/Index/1会匹配Home控制器的Index方法,并且把1作为id参数传入。
  • defaults配置:当用户直接访问项目根地址时,会默认跳转到Home控制器的Index方法,id参数设为可选意味着不传入该参数也能正常访问。

如果要测试路由是否生效,别忘了创建对应的控制器和视图:

  • 右键项目→添加→控制器→选择「MVC 5控制器 - 空」,命名为HomeController
  • HomeController里添加Index方法:
public ActionResult Index()
{
    return View();
}
  • 右键Index方法→添加视图→选择「空」模板,创建对应的视图文件。

启动项目后,就能正常访问默认路由了。如果需要自定义路由规则,只需要在RegisterRoutes方法里添加更多routes.MapRoute即可,注意自定义路由要放在默认路由之前,因为路由是按照注册顺序匹配的。

内容的提问来源于stack exchange,提问作者CrazyFirewall

火山引擎 最新活动