ASP.NET Core带String参数的控制器路由配置异常问题
解决ASP.NET Core路由中URL参数绑定为NULL的问题
你配置了自定义路由,希望通过/Account/Profile/FrankReynolds这种URL格式传递name参数,但实际访问时name参数始终为null,以下是具体的排查和解决方法:
调整路由注册顺序
如果项目中同时存在默认路由(比如{controller=Home}/{action=Index}/{id?}),它会优先匹配请求,导致你的AccountDefault路由无法生效。请确保自定义路由注册在默认路由之前:// 先注册Account专属路由 app.MapControllerRoute( name: "AccountDefault", pattern: "{controller=Account}/{action=Profile}/{name}" ); // 再注册全局默认路由(若需保留) app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}" );显式指定参数绑定源
给name参数添加[FromRoute]特性,明确告诉框架从路由路径中读取该参数,避免和查询参数绑定混淆:public async Task<IActionResult> Profile([FromRoute] string name, string filter = null, int? page = null) { // 你的业务逻辑代码 }检查路由模板与参数名一致性
确认路由模板中的name段和控制器方法的参数名完全一致(大小写不敏感,但保持一致能避免潜在问题)。如果name允许为空,需要在模板中添加?标记为可选,但你的场景中name是必填项,当前模板无需修改。排查属性路由冲突
如果Account控制器的Profile方法上使用了[Route]特性,属性路由会优先于全局路由生效。此时需要调整属性路由模板匹配需求,或者移除全局的AccountDefault路由:[Route("Account/Profile/{name}")] public async Task<IActionResult> Profile(string name, string filter = null, int? page = null) { // 你的业务逻辑代码 }
内容的提问来源于stack exchange,提问作者Bad Dub
相关产品推荐
相关产品推荐

