【问题标题】:jquery ajax - calling my asp.net web api gives a wrong url and a 404 not found messagejquery ajax - 调用我的 asp.net web api 会给出错误的 url 和 404 not found 消息
【发布时间】:2014-02-25 20:45:29
【问题描述】:

我正在编写一个小型 ASP.NET MVC 站点,其中还包含一个我编写的 WEB API。

我已将本地 IIS 上的项目配置为 http://localhost/mysite

在我网站的主页上,我包含了一个我编写的 js 脚本:

<script src="@Url.Content("~/Content/js/home.js")"></script>

在我调用的那个js的页面就绪事件上:

$.ajax({
    url: 'api/getdetails',
    accepts: 'application/json',
    cache: false,
    type: 'GET',
    success: function (data) {
        alert(data);
    }
});

查看 Fidler 时,我看到页面调用返回 404,因为它不会尝试将其加载到我所在的相对路径 (http://localhost/mysite),而是尝试加载服务器的根目录 - 所以通话看起来像这样http://localhost:80/api/getdetails

当我编写 Web 表单时,我一直在进行诸如此类的 ajax 调用,而且它总是有效。

我错过了什么?

谢谢

【问题讨论】:

  • Web API 是一个基于 REST 的系统。尝试更深入地挖掘 REST 并接受它的思维方式。将控制器命名为“GetDetails”并不轻松,而且也是重复的。
  • @timmkrause 谢谢 - 我会考虑到这一点 - 但是,这不是导致问题的原因......
  • 什么输出 url 是 @Url.Content("...") 就像你在你的帖子中所说的那样,给?对他的 url 模式感兴趣...

标签: javascript jquery ajax asp.net-mvc asp.net-web-api


【解决方案1】:

我最终在我的布局 html 中添加了一个 js var:

var baseUrl = '@Url.Content("~/")';

然后在我的 ajax 调用中,我添加了该基本网址:

$.ajax({
    url: baseUrl + 'api/getdetails',
    accepts: 'application/json',
    cache: false,
    type: 'GET',
    success: function (data) {
        alert(data);
    }
});

无论页面看起来如何,这都能解决问题。即使我导航到http://localhost/mysite/home/index

这可能不是完美的解决方案,我绝对认为旧的网络表单方式更好 - 但我想任何技术都有优点和缺点。

如果有人有更好的解决方案,仍然会很高兴。现在 - 这可以解决问题。

【讨论】:

    【解决方案2】:

    当您导航到

    http://localhost/mysite
    

    行为与

    略有不同
    http://localhost/mysite/
    

    尝试确认。如果没有尾部斜杠,“mysite”看起来像一个文档名称,而不是一个文件夹,因此相对路径将从服务器的根目录形成。

    您可能需要做的是将站点内容 URL 传递到您的 home.js 并在您的代码中形成绝对路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2012-03-09
      • 2021-12-18
      • 2013-03-10
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多