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

ASP.NET Web API接口404错误求助:Admin接口无法访问

解决ASP.NET Web API子文件夹控制器404问题

嘿,我懂你现在的困扰——把AdminController放在Controllers/api子文件夹后,访问http://localhost:57368/api/admin出现了404错误。这其实是因为ASP.NET Web API的默认路由配置不会自动识别Controllers下的子文件夹结构,咱们一步步来搞定它:

方法一:使用属性路由(推荐,更灵活)

属性路由是最直接的解决方案,它能让你精准定义每个控制器和Action的路由路径,完全不受文件夹结构限制。

步骤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:给控制器添加路由属性

修改你的AdminController代码,添加[RoutePrefix]和[Route]属性:

[RoutePrefix("api/admin")]
public class AdminController : ApiController 
{ 
    DBEntities _context; 
    public AdminController() 
    { 
        _context = new DBEntities(); 
    } 

    [HttpGet]
    [Route("")] // 空Route表示匹配RoutePrefix的根路径,也就是/api/admin
    public IEnumerable<string> GetUsers() 
    { 
        return new string[] { "Muhammad","Ali"}; 
    } 
}

修改完成后,再访问http://localhost:57368/api/admin就能正确返回你预期的JSON结果了。

方法二:修改默认路由的命名空间约束

如果你更习惯传统路由配置,可以通过添加命名空间约束,让路由系统找到子文件夹里的控制器:

打开App_Start/WebApiConfig.cs,修改默认路由配置,加上你的子文件夹命名空间(假设项目命名空间是YourProject,那么控制器的命名空间就是YourProject.Controllers.api):

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    namespaces: new[] { "YourProject.Controllers.api" }
);

如果Controllers下有多个子文件夹,还可以添加多个命名空间,或者设置UseNamespaceFallback = false避免路由冲突:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: null,
    handler: null,
    namespaces: new[] { "YourProject.Controllers.api" }
).DataTokens["UseNamespaceFallback"] = false;

额外检查点

除了路由配置,还要确认这几点:

  • 确保控制器确实继承自ApiController(你已经做到了)
  • 确保Action方法是public的(你的GetUsers方法符合要求)
  • 确认项目运行时的端口号和你访问的57368一致(可在项目属性的Web选项卡查看)
  • 确认Global.asax里已经注册了WebApiConfig:GlobalConfiguration.Configure(WebApiConfig.Register);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:01:18