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

ASP.NET Core 6 MVC Program.cs配置及REST风格路由恢复问题

2. 迁移后REST风格URL传参的修复方案

你的问题源于约定路由的参数覆盖范围不足和ActionLink的参数错误,以下是具体修复步骤:

问题根源

  1. 全局约定路由{controller=Home}/{action=Index}/{id?}仅定义了id作为路由参数,code不在模板内,因此ActionLink会自动将其放入查询字符串
  2. ActionLink的控制器参数错误:应传入"Vendor"而非"VendorController"(ASP.NET Core会自动补全Controller后缀)

修复步骤

方案1:扩展全局约定路由

若希望多个参数都通过REST风格URL传递,修改默认路由模板,将需要的参数加入:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}/{code?}");
});

提示:?表示参数可选,若id和code为必填项,可去掉?

方案2:修正ActionLink参数

视图中的ActionLink控制器名称存在冗余后缀,修正后:

@Html.ActionLink("Vendors", "Index", "Vendor", new { @Id = 15153, @Code = "AGR3" }, null)

方案3:使用特性路由(更灵活)

若不想修改全局路由,可给控制器/动作方法添加特性路由,精准控制URL格式:

[Route("[controller]/[action]/{id}/{code}")]
public class VendorController : Controller
{
    [HttpGet]
    public ActionResult Index(int id, string code)
    {
        var model = _dataService.GetVendorInfo(id, code);
        return View("Index", model);
    }
}

此方式下,ActionLink会自动匹配特性路由,生成/Vendor/Index/15153/AGR3格式的URL。

额外优化:移除冗余代码

示例Program.cs中存在两处重复的控制器服务注册:AddControllersWithViews()已包含AddControllers()的功能,可删除builder.Services.AddControllers()相关代码;同时手动构建ConfigurationBuilder属于冗余操作,builder.Configuration已默认加载配置源,可直接使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:56:10