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

Asp.Net Core Web API新增Get方法报404错误求助

解决Asp.Net Core Web API中新增Get方法返回404的问题

这个问题其实是Asp.Net Core路由系统和旧版Web API的差异导致的,咱们一步步拆解清楚:

问题根源

你的控制器已经标注了[Route("api/MyController")],这意味着控制器内所有方法的路由都会自动拼接这个前缀。而你给方法加的[Route("api/MyNewMethodName")]是相对路由,最终组合后的完整路由是:
api/MyController/api/MyNewMethodName
但你调用的地址是myURL/api/MyNewMethodName,完全不匹配,自然返回404。旧版Web API的路由处理逻辑更宽松,允许这种写法,但Core的路由是严格的前缀拼接规则。

几种可行的解决方案

方案1:使用相对路由(推荐,符合Core路由规范)

修改方法上的Route特性,去掉api/前缀,让它和控制器的前缀正常拼接:

[HttpGet]
[Route("MyNewMethodName")]
public object MyNewMethodName(string parameter1) 
{
    // 你的业务逻辑
}

对应的调用地址要调整为:
myURL/api/MyController/MyNewMethodName?parameter1=somestring

你也可以用更简洁的写法,把HttpGet和路由模板合并:

[HttpGet("MyNewMethodName")]
public object MyNewMethodName(string parameter1) 
{
    // 你的业务逻辑
}

方案2:使用绝对路由(保持原有调用地址)

如果你想完全保留原来的调用地址不变,可以给方法的Route加上开头的斜线,让它成为绝对路由,这样会忽略控制器的路由前缀:

[HttpGet]
[Route("/api/MyNewMethodName")]
public object MyNewMethodName(string parameter1) 
{
    // 你的业务逻辑
}

这样你原来的调用地址myURL/api/MyNewMethodName?parameter1=somestring就能正常访问了。

额外提示

如果遇到参数无法绑定的情况,可以给参数加上[FromQuery]特性明确指定从QueryString获取:

public object MyNewMethodName([FromQuery] string parameter1) 
{
    // 你的业务逻辑
}

不过对于简单的string类型,Core默认会自动从QueryString绑定,这个一般不是问题,但遇到复杂场景时可以用上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:19:01