ASP.NET Web API中路由模板与控制器名称不符的技术疑问
关于ASP.NET Web API路由的疑问解答
嘿,别担心,你完全没操作错误!当前路由是api/Emp是ASP.NET Web API的默认路由规则导致的,不是你哪里弄错了~
为什么路由是api/Emp?
ASP.NET Web API的默认路由模板(通常在WebApiConfig.cs里配置)是这样的:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
这个规则会自动去掉控制器类名的Controller后缀,你的控制器叫EmpController,所以路由里的{controller}部分就会解析成Emp,最终路由就是api/Emp。
如果想改成api/Employeetbl,有两种常用方案:
方案一:修改控制器名称(最贴合默认规则)
把你的控制器类名改成EmployeetblController,这样默认路由就会自动匹配成api/Employeetbl,不需要额外配置,这是最符合Web API约定俗成的做法。方案二:手动指定路由(更灵活)
如果你不想改控制器名称,可以用路由特性来手动指定:- 在控制器类上添加路由前缀:
[RoutePrefix("api/Employeetbl")] public class EmpController : ApiController { private EmployeeDBEntities db = new EmployeeDBEntities(); // 此时这个Action的路由就是api/Employeetbl public IQueryable<Employeetbl> GetEmployeetbls() { return db.Employeetbl; } } - 或者直接在Action上指定完整路由:
public class EmpController : ApiController { private EmployeeDBEntities db = new EmployeeDBEntities(); [Route("api/Employeetbl")] public IQueryable<Employeetbl> GetEmployeetbls() { return db.Employeetbl; } }
- 在控制器类上添加路由前缀:
额外小提示
路由命名其实没有强制要求必须和实体类同名,只要符合你的API设计逻辑、方便前端调用就行。如果觉得api/Employeetbl更直观,选上面任意一种方法调整都可以~
内容的提问来源于stack exchange,提问作者Wan Street
相关产品推荐
相关产品推荐

