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

Web API调用遇404错误:找不到匹配'get'的控制器及请求资源

修复Web API GET请求的404错误

我来帮你分析并解决这两个404问题,核心原因是路由配置不匹配和GET请求的参数绑定错误:

错误原因拆解

  1. 找不到'get'控制器:你的控制器名为GetlookUpDataController,但如果Web API没有启用属性路由,或者属性路由优先级低于传统路由,请求URI里的get会被传统路由的{controller}占位符解析为控制器名称,而你根本没有GetController,所以匹配失败。
  2. 找不到匹配的HTTP资源:你的Retreive方法标记了[HttpGet]却用了[FromBody]——GET请求本身没有请求体,这个参数绑定会直接失败,导致框架找不到能处理该请求的方法;另外这个Profile data参数在方法里根本没用到,属于冗余代码。

具体修复步骤

1. 启用并优先配置属性路由

打开项目里的App_Start/WebApiConfig.cs,确保先启用属性路由,再配置传统路由(如果需要保留的话):

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // 必须先启用属性路由,确保它优先于传统路由
        config.MapHttpAttributeRoutes();

        // 传统路由(可选,不需要可以删除)
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

2. 修正GET方法的参数绑定

直接移除多余的[FromBody]和Profile data参数(因为你方法里没用到它):

[RoutePrefix("api/get")]
public class GetlookUpDataController : ApiController 
{ 
    private readonly UserProfileRepository lookUpRepo; 

    public GetlookUpDataController() 
    { 
        lookUpRepo = new UserProfileRepository(); 
    } 

    [HttpGet] 
    [Route("GetUserData")] 
    public IHttpActionResult Retreive() // 移除[FromBody]和无用参数
    { 
        var retrieveResult = lookUpRepo.View(); 
        if (retrieveResult.Length > 4) 
        { 
            return Ok(retrieveResult); 
        } 
        else 
        { 
            Console.Write("error"); 
            return Ok("error"); 
        } 
    }
}

如果后续需要传递参数给View()方法,改用[FromUri]从URL查询字符串获取参数:

[HttpGet]
[Route("GetUserData")]
public IHttpActionResult Retreive([FromUri] Profile data)
{
    var retrieveResult = lookUpRepo.View(data); // 假设View方法接受参数
    // ... 原有逻辑
}

对应的请求URI示例:http://192.168.250.113/PrimaSysWebAPI/api/get/GetUserData?UserId=123&UserName=test

3. 额外验证点

  • 确认控制器确实继承自ApiController(你的代码已经满足);
  • 检查项目的命名空间,确保GetlookUpDataController在Web API默认扫描的范围内;
  • 确认服务器站点的虚拟路径是PrimaSysWebAPI(和你请求URI里的路径一致)。

这样修改后,你的请求http://192.168.250.113/PrimaSysWebAPI/api/get/GetUserData就能正确匹配到控制器和方法了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:14:58