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

如何配置路由路径直接指向Controller而非获取方法名?

问题解决:ASP.NET Web API 接口访问路径配置

环境与问题

这是基于.NET 4.8.1的C# ASP.NET Web API程序,想要通过GET api/user?userCode=的方式直接访问接口,但尝试省略ActionName、创建名为Get()的方法都无效。

当前配置

路由配置

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

控制器代码

public class UserController : ApiController
{
    [HttpGet, ActionName("Get")]
    public object GetUserInfo(string userCode)
    {
        return new { userCode, userPwd = "123" };
    }
}

解决方法

方法1:添加默认Action的路由规则

现有路由模板要求必须指定action名称,要实现api/user?userCode=的访问方式,需要在现有路由前新增一条针对GET请求的默认路由:

// 新增:匹配不带action的GET请求,默认action为Get
config.Routes.MapHttpRoute(
    name: "DefaultApiGet",
    routeTemplate: "api/{controller}",
    defaults: new { action = "Get" },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

// 保留原有的默认路由
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

这条新路由会优先匹配不带action的GET请求,自动将action设为Get,对应你控制器里标记了ActionName("Get")的GetUserInfo方法。

方法2:修改控制器方法名(无需改路由但需调整访问路径)

如果不想修改路由,可以把控制器方法名改成Get,直接访问api/user/Get?userCode=即可生效:

public class UserController : ApiController
{
    [HttpGet]
    public object Get(string userCode)
    {
        return new { userCode, userPwd = "123" };
    }
}

注意事项

查询字符串参数userCode会被Web API自动绑定,只要路由匹配到对应方法,就能正确获取参数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:12:49