You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Web应用中如何配置路由支持Cases/Search/Volvo式路径?

嗨,这个需求其实挺常见的,咱们可以通过两种主流方式来实现——属性路由或者传统全局路由配置,我给你分别拆解清楚:

方法一:使用属性路由(推荐,更直观灵活)

如果你的项目是ASP.NET MVC 5及以上版本,属性路由已经是默认支持的(老项目可能需要先在RouteConfig.cs里加上routes.MapMvcAttributeRoutes();开启)。直接在你的CasesController的Search动作方法上添加路由属性即可:

public class CasesController : Controller
{
    // 同时兼容两种访问方式:/Cases/Search?q=Volvo 和 /Cases/Search/Volvo
    [Route("Cases/Search/{q?}")]
    public ActionResult Search(string q)
    {
        // 你的搜索逻辑代码
        return View();
    }
}

这里的{q?}里的问号表示这个参数是可选的,也就是说/Cases/Search(不带搜索词)的请求也能正常匹配到这个方法。如果你要求必须传入搜索词才能访问,去掉问号改成{q}就行。

方法二:修改全局路由表配置

要是你更习惯用全局路由的方式管理,也可以在项目的RouteConfig.cs文件里添加一条自定义路由,一定要放在默认路由的前面(因为路由是按顺序匹配的,先匹配到的会被优先使用):

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

        // 新增的搜索专用路由
        routes.MapRoute(
            name: "CaseSearch",
            url: "Cases/Search/{q}",
            defaults: new { controller = "Cases", action = "Search", q = UrlParameter.Optional }
        );

        // 原有默认路由
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

这段配置会让Cases/Search/Volvo这样的请求直接映射到CasesController的Search方法,把Volvo作为q参数传入。同样,q = UrlParameter.Optional是让无参数的请求也能匹配,不需要的话可以删除这个默认值。

额外注意点

  • 如果是ASP.NET Core项目,配置逻辑类似,但路由配置会放在Program.cs或Startup.cs里,用app.MapControllerRoute或者直接使用属性路由,核心思路完全一致。
  • 如果你原来的Search方法已经标记了[HttpGet]属性,和[Route]属性一起使用完全没问题,不会有冲突。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:58:55