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

ASP.NET Core MVC中如何限制用户编辑接口的ID参数为整数类型?

如何在ASP.NET Core MVC中限制路由参数仅为整数类型

你已经找对了方向,只差关键的一步——给路由参数加上类型约束!默认情况下,如果路由里只写{id},ASP.NET Core会尝试把传入的字符串转换成方法参数的类型(比如你方法里的int id),但这种方式不够严谨,还可能引发模型绑定异常。更好的做法是直接让非整数的URL不匹配目标方法,直接返回404,这样更符合路由设计的规范。

下面给你两种最常用的解决方法:

方法一:使用属性路由添加类型约束(推荐,更灵活)

直接在Edit方法的路由属性里给id加上:int约束,这样只有当URL里的id是整数时,才会匹配这个方法。代码示例如下:

创建用户的GET方法

// 匹配 /Admin/User
[HttpGet]
[Route("Admin/User")]
public IActionResult Create()
{
    // 编写创建新用户的逻辑,比如返回创建视图
    return View();
}

编辑用户的GET方法(带int约束)

// 仅匹配 /Admin/User/123 这类整数ID的URL
[HttpGet]
[Route("Admin/User/{id:int}")]
public IActionResult Edit(int id)
{
    // 根据id查询用户并返回编辑视图
    var user = _userService.GetUserById(id);
    if (user == null)
    {
        return NotFound();
    }
    return View(user);
}

设置完成后,当你访问/Admin/User/ABCD时,因为ABCD不是整数,这个路由不会匹配Edit方法,ASP.NET Core会去寻找其他可能匹配的路由,如果没有的话就直接返回404 NotFound,完美达到你要的限制效果。

方法二:修改全局路由模板(适合统一配置)

如果你更倾向于用全局路由而非属性路由,可以在Program.cs(ASP.NET Core 6+)或者Startup.cs里配置带约束的路由规则,确保带整数ID的Admin/User路由优先匹配:

var builder = WebApplication.CreateBuilder(args);

// 添加MVC服务
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 配置路由
app.UseRouting();

app.MapControllerRoute(
    name: "adminUserEdit",
    // 这里的{id:int}就是约束,仅匹配整数ID
    pattern: "Admin/User/{id:int}",
    defaults: new { controller = "Admin", action = "Edit" }
);

// 默认路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}"
);

app.Run();

额外注意事项

  • 路由匹配是有顺序的,更具体、带约束的路由要放在前面,否则默认路由可能会先匹配到不符合要求的URL。
  • 如果你之前的Edit方法没有加[Route]属性,而是依赖默认路由,那一定要确保全局路由里的约束配置正确,或者直接改用属性路由更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:59:50