C# 我应该添加什么路径来映射到API控制器?
我已将ApiController添加到我的asp.net core 2.2应用程序中,来自UI的异步调用不匹配 以下是我在Startup.cs中的路线C# 我应该添加什么路径来映射到API控制器?,c#,asp.net-core,asp.net-core-mvc,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core Webapi,我已将ApiController添加到我的asp.net core 2.2应用程序中,来自UI的异步调用不匹配 以下是我在Startup.cs中的路线 app.UseMvc(config => { config.MapRoute( "Api", "api/{controller}/{action}/{id?}" ); config.MapRoute( "Default", "{controller=
app.UseMvc(config =>
{
config.MapRoute(
"Api",
"api/{controller}/{action}/{id?}"
);
config.MapRoute(
"Default",
"{controller=App}/{action=Index}/{id?}"
);
});
下面是向API控制器发出各种GET请求的javascript函数之一
函数clearAllFilters(){
美元({
url:“/api/GridFilter/ClearAllFilters”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:函数(){
console.log(“过滤器已清除”);
}
});
}
以下是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与此不匹配?我的url是/api/controller/action,它似乎与启动中映射的第一个路由匹配 你是:
操作可以按常规路由,也可以按属性路由。在控制器或操作上放置路由将使其成为路由属性。定义属性路由的操作无法通过常规路由实现,反之亦然控制器上的任何路由属性将路由控制器属性中的所有操作
您的示例中的以下调用配置了常规路由模板:
但是,您已通过使用路由属性([Route(…)]
)将GridFilterController
配置为使用属性路由:
要从/api/GridFilter/ClearAllFilters
访问ClearAllFilters
操作,您有两个常规选项:
[Route("api/[controller]/[action]")]
这意味着操作的名称将包含在路由中,这与您设置的传统路由模板类似[Route(…)]
属性。但是,这并不理想,因为您还必须删除[ApiController]
属性谢谢我在微软的文档中搜索了又搜索,但不知怎么的,我没有注意到api控制器必须使用基于属性的路由的细节。我按照你的建议选择了选项1。现在效果很好。我在回答属性路由要求时添加了一个文档链接。
[Route("api/[controller]")]
[ApiController]
public class GridFilterController : ControllerBase
[Route("api/[controller]/[action]")]