从 js ajax 调用 WebApi 控制器的问题

Posted

技术标签:

【中文标题】从 js ajax 调用 WebApi 控制器的问题【英文标题】:Problem with calling WebApi controller from js ajax 【发布时间】:2019-03-24 09:52:26 【问题描述】:

在我的 ASP.NET MVC 应用程序中,我在通过 ajax 语句调用 WebAPI 控制器时遇到问题。

这是我的代码:

    $.ajax(
        url: 'api/cartitems',
        type: self.cartItem.id == null ? 'post' : 'put',
        contentType: 'application/json',
        data: ko.toJSON(data)
    )
    .done(self.successfulSave)
    .fail(self.errorSave)

它会产生错误 404 - 找不到文件。

我测试了不同的可能性,只有一种可行的是使用整个 URL 路径。

    $.ajax(
        url: 'http://xx.yyy.zz.vvv/APP_NAME/api/cartitems',
        type: self.cartItem.id == null ? 'post' : 'put',
        contentType: 'application/json',
        data: ko.toJSON(data)
    )
    .done(self.successfulSave)
    .fail(self.errorSave)

是否可以不使用完整路径?

【问题讨论】:

看看这个答案,***.com/a/30766123 【参考方案1】:

我想知道,ASP.NET MVC 配置是否有错误。 在开发人员环境中,它使用 ajax 调用中的简化 URL。 而且我无法相信微软会强迫开发人员在每个生产系统上调整 URL 地址。

【讨论】:

【参考方案2】:

我敢打赌Url.Action 构造会起作用。它与您的路由配置相关联以生成有效的 url。

在 .JS 脚本中

 url:'@Url.Action("api","cartitems")',

在.xxhtml

url:'@Model.YourPostabckUrlVariable',

【讨论】:

噢!你是对的。也许将回发放在模型中。

以上是关于从 js ajax 调用 WebApi 控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 调用 webapi get 方法时出现 405 错误

WebAPI请求——js调用

Protobuf : WebApi -> JS - 解码对象为空

对“asp.net core WebApi”的 ajax 调用返回一个奇怪/奇怪的值

js调用webapi如何传递日期类型参数

AJAX 将字符串数组发布到 webapi 2