ASP.NET Core Web API添加多API方法时Fetch错误排查
问题根源:路由冲突
你遇到的问题是两个HttpGet方法使用了相同的路由路径,ASP.NET Core路由系统无法区分应该响应哪个请求,导致请求匹配失败。
默认情况下,若不给HttpGet指定具体路由模板,同控制器下的所有HttpGet方法都会匹配控制器的基础路径(比如/api/YourControllerName)。当两个Get方法共存时,路由系统无法确定调用哪个,就会引发错误。
解决方法:给每个Get方法指定唯一的路由模板
修改代码,给每个HttpGet添加独特的子路径,让路由能区分不同接口:
[HttpPost] public string Login(string username, string pwd) { // 原有逻辑 } [HttpGet("category-data")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = "Administrator")] public IEnumerable<CategoryDataModel> GetCategoryData() { List<CategoryDataModel> prodData = AdminProductResearchController.LoadProductSearch(); return prodData; } [HttpGet("current-search")] [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Roles = "Administrator")] public IEnumerable<CurrentSearchDataModel> GetCurrentSearch() { List<CurrentSearchDataModel> currSearchData = AdminCurrentSearchesController.BuildData(); return currSearchData; }
补充说明
- 如果控制器上有
[Route("api/[controller]")]这类路由前缀,两个接口的完整路径会变成/api/你的控制器名/category-data和/api/你的控制器名/current-search,路径唯一就能正常匹配。 - 你注释掉的
Name属性是用来生成路由名称的(比如用于Url.Link生成链接),不是用来区分请求路径的,所以即使开启它也解决不了路由冲突问题。
内容的提问来源于stack exchange,提问作者user616076
相关产品推荐
相关产品推荐

