我已將 ApiController 添加到我的 asp.net core 2.2 應(yīng)用程序中,并且來自 UI 的異步調(diào)用不匹配。這是我在 Startup.cs 中的路線。app.UseMvc(config =>{ config.MapRoute( "Api", "api/{controller}/{action}/{id?}" ); config.MapRoute( "Default", "{controller=App}/{action=Index}/{id?}" );});下面是向 API 控制器發(fā)出各種 GET 請(qǐng)求的 JavaScript 函數(shù)之一。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不匹配這個(gè)?我的網(wǎng)址是 /api/controller/action ,它似乎與啟動(dòng)時(shí)映射的第一個(gè)路由匹配。
1 回答

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