gpt4 book ai didi

jQuery Ajax GET 在 Web API 核心 Controller 中调用错误的方法

转载 作者:行者123 更新时间:2023-12-01 03:07:01 30 4
gpt4 key购买 nike

我正在执行一个简单的 get 调用,但我似乎无法在我的 Web API Controller 中触发正确的 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" });
});

我的 Controller 包含 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",

引用Routing to controller actions in ASP.NET Core

关于jQuery Ajax GET 在 Web API 核心 Controller 中调用错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783954/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com