【问题标题】:How i can route from jquery to controller api?我如何从 jquery 路由到控制器 api?
【发布时间】:2021-01-18 22:02:52
【问题描述】:

我有一个无法解决的问题。

我有一个文本框。对于这个文本框,我有一个 jquery 自动完成功能。 Jquery 正在工作,但得到 错误代码 404,所以我的路由无法以某种方式工作。 我希望有人能帮助我。 谢谢

jQuery

<script>
    $(document).ready(function () {
        $("#TabakName").autocomplete({
            source: 'api/tabaksuche/search',
           
        });
    });
</script>

控制器

{
    [Route("api/[controller]")]
    [ApiController]
    public class TabakSucheController : ControllerBase
    {
        private readonly HookahContext hookahContext;

        
        public TabakSucheController(HookahContext _hookahContext)
        {
            hookahContext = _hookahContext;
        }

        [Produces("application/json")]
        [HttpGet("search")]
        public async Task<IActionResult> Search()
        {
            try
            {
                string term = HttpContext.Request.Query["term"].ToString();
                var postTabak = hookahContext.TabakSuches.Where(p => p.TabakNameInventar.Contains(term)).Select(p => p.TabakNameInventar).ToList();

                return Ok(postTabak);
            }

            catch
            {
                return BadRequest();
            }
        }
    }
}

启动

    app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

【问题讨论】:

  • 您是否检查了浏览器的调试器以找出该请求发送到的地址?看来您必须将source 参数更改为/api/tabaksuche/search
  • localhost:44347/api/tabaksuche/search?term=a 这是调试器中的 GET Url。我也试过 /api/tabaksuche/search 但没有成功..

标签: jquery asp.net-core routes asp.net-core-mvc


【解决方案1】:

[HttpGet("search")] 属性重写控制器的路由。因此,您的操作将通过 /search 而不是 /api/tabaksuche/search 访问。 将您的 HttpGet 属性更改为 [HttpGet("api/TabakSuche/search")] 将解决您的问题。

控制器:

[HttpGet("api/TabakSuche/search")]
public async Task<IActionResult> Search()
{
    ...
}

建议:如果您在 Razor 视图中编写脚本,最好使用 Url.Action 助手,这样您的路由就不会丢失。

<script>
    $(document).ready(function () {
        $("#TabakName").autocomplete({
            source: '@Url.Action("Search", "Tabaksuche")',
        });
    });
</script>

上面的代码总是会生成正确的路线。

你可以阅读更多关于Url.Action Helper here的信息。

【讨论】:

  • 非常感谢。有效。我一定会读到 Url.Action Helper :)
猜你喜欢
  • 2021-01-08
  • 2019-09-09
  • 2015-05-04
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 2015-02-14
相关资源
最近更新 更多