jQuery Ajax GET 在 Web 中调用错误的方法 API 核心控制器
jQuery Ajax GET calling wrong method in Web API Core controller
我正在执行一个简单的 get 调用,但我似乎无法在我的 Web API 控制器中获得正确的 GET 方法来触发。我的路线如下:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
// I already tried removing this, same result
routes.MapSpaFallbackRoute("spa-fallback",
new { controller = "Home", action = "Index" });
});
我的控制器包含 GET 方法(按顺序):
[Route("api/[controller]")]
[ApiController]
public class SchoolYearsController : ControllerBase
{
[HttpGet("~/api/terms/{termId:int}")]
public IActionResult GetTermById(int termId)
{
// omitted for brevity
}
[HttpGet("~/api/terms")]
public IActionResult GetAllTerms()
{
// omitted for brevity
}
}
和我的 ajax 通话:
loadTerm() {
$.ajax({
url: "/api/terms?termid=3",
method: "GET",
contentType: "application/json; charset=utf-8"
})
.done((response, textStatus, xhr) => {
// omitted for brevity
})
.fail((xhr, textStatus, errorThrown) => {
console.log(errorThrown);
});
}
我认为这些是相关部分。出于某种原因,它总是调用第二种方法(“~/api/terms”)而不是带有 termId 参数的方法。对正在发生的事情有什么想法吗?
该 GetTermById
操作的路由模板需要路由中的 termId
而不是查询字符串中的
注意代码中的注释。
//GET /api/terms/3
[HttpGet("~/api/terms/{termId:int}")]
public IActionResult GetTermById(int termId) {
// omitted for brevity
}
所以这意味着如果请求的 URL 与预期的路由模板不匹配,它将不会调用该操作。 GetAllTerms
操作需要 /api/terms
,这与客户端进行的调用相匹配,即使使用查询字符串也是如此,因为在这种情况下,路由模板在映射操作时不会考虑查询字符串。
更新客户端调用
url: "/api/terms/3",
我正在执行一个简单的 get 调用,但我似乎无法在我的 Web API 控制器中获得正确的 GET 方法来触发。我的路线如下:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
// I already tried removing this, same result
routes.MapSpaFallbackRoute("spa-fallback",
new { controller = "Home", action = "Index" });
});
我的控制器包含 GET 方法(按顺序):
[Route("api/[controller]")]
[ApiController]
public class SchoolYearsController : ControllerBase
{
[HttpGet("~/api/terms/{termId:int}")]
public IActionResult GetTermById(int termId)
{
// omitted for brevity
}
[HttpGet("~/api/terms")]
public IActionResult GetAllTerms()
{
// omitted for brevity
}
}
和我的 ajax 通话:
loadTerm() {
$.ajax({
url: "/api/terms?termid=3",
method: "GET",
contentType: "application/json; charset=utf-8"
})
.done((response, textStatus, xhr) => {
// omitted for brevity
})
.fail((xhr, textStatus, errorThrown) => {
console.log(errorThrown);
});
}
我认为这些是相关部分。出于某种原因,它总是调用第二种方法(“~/api/terms”)而不是带有 termId 参数的方法。对正在发生的事情有什么想法吗?
该 GetTermById
操作的路由模板需要路由中的 termId
而不是查询字符串中的
注意代码中的注释。
//GET /api/terms/3
[HttpGet("~/api/terms/{termId:int}")]
public IActionResult GetTermById(int termId) {
// omitted for brevity
}
所以这意味着如果请求的 URL 与预期的路由模板不匹配,它将不会调用该操作。 GetAllTerms
操作需要 /api/terms
,这与客户端进行的调用相匹配,即使使用查询字符串也是如此,因为在这种情况下,路由模板在映射操作时不会考虑查询字符串。
更新客户端调用
url: "/api/terms/3",