我已將 ApiController 添加到我的 asp.net core 2.2 應用程序中,并且來自 UI 的異步調用不匹配。這是我在 Startup.cs 中的路線。app.UseMvc(config =>{ config.MapRoute( "Api", "api/{controller}/{action}/{id?}" ); config.MapRoute( "Default", "{controller=App}/{action=Index}/{id?}" );});下面是向 API 控制器發出各種 GET 請求的 JavaScript 函數之一。function clearAllFilters() { $.get({ url: "/api/GridFilter/ClearAllFilters", contentType: "application/json; charset=utf-8", dataType: "json", success: function () { console.log('filters cleared'); } });}這是 API 控制器:[Route("api/[controller]")][ApiController]public class GridFilterController : ControllerBase{ private static readonly string[] FilterFields = { // Bunch of strings, omitted for brevity }; [HttpGet] public IActionResult ClearAllFilters() { foreach (string column in FilterFields) { if (HttpContext.Session.TryGetValue(column, out byte[] savedJson)) { HttpContext.Session.Remove(column); } } return Ok(true); }為什么asp.net不匹配這個?我的網址是 /api/controller/action ,它似乎與啟動時映射的第一個路由匹配。
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
您正在混合傳統路由和屬性路由:
操作要么是傳統路由,要么是屬性路由。將路由放置在控制器或操作上使其具有路由屬性。定義屬性路由的操作無法通過常規路由到達,反之亦然??刂破魃系?strong>任何路由屬性都會使控制器屬性中的所有操作都路由。
示例中的以下調用配置傳統路由模板:
config.MapRoute("Api","api/{controller}/{action}/{id?}");
但是,您已GridFilterController
通過使用路由屬性 (?[Route(...)]
) 配置為使用屬性路由:
[Route("api/[controller]")] [ApiController] public?class?GridFilterController?:?ControllerBase
要從訪問ClearAllFilters
操作/api/GridFilter/ClearAllFilters
,您有兩個常規選項:
將屬性路由模板更改為:
[Route("api/[controller]/[action]")]
這意味著操作的名稱將作為路由的一部分包含在內,這與您設置的傳統路由模板類似。
完全刪除該
[Route(...)]
屬性。但是,這并不理想,因為您還必須刪除該[ApiController]
屬性,因為這需要屬性路由。
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消