【问题标题】:Web.API Deploy URLs not working?Web.API 部署 URL 不起作用?
【发布时间】:2013-02-28 16:48:39
【问题描述】:

在我的 Web.API 项目中,为了在 Web 设置中进行开发,我在本地 IIS Web 服务器上使用http://localhost/reporter 的“项目网址:”。该站点使用 asp.net mvc4 提供了一些页面,其中的 javascript 调用发布到诸如“api/getdata/”之类的 url。

由于某种原因,这些已停止工作-例如,我将 jQuery 发布到“api/getdata”,完整的 URL 是 http://localhost/reporter/api/getdata,这是正确的。生活很美好。

但现在发生了一些变化——同样的 jQuery 帖子,我所知道的代码中没有其他任何不同,但我的完整 URL 现在是 http://localhost/api/getdata - 我失去了那个“记者”部分。我认为当我将它部署到另一台内部服务器时可能发生了一些事情——它在本地运行良好——然后我部署并注意到它在新服务器上不起作用。然后我发现我不再在本地工作了。

我已经仔细检查了,我的项目配置似乎和以前一样......?

我确定我弄坏了一些东西,但我不知道是什么。想法?

【问题讨论】:

  • 你是否使用虚拟目录进行开发?无论如何,您应该使用 url:/api/getdata 而不是使用绝对 URL 发布
  • 我确实使用了虚拟目录...但我的 web.api 应用程序不是在http://localhost/reporter 上运行吗?所以调用-应该-是http://localhost/reporter/api/getdata?我不发布到绝对网址,我的 jQuery 帖子与 'url: "api/getdata"' 完全一样
  • 所以停止使用虚拟目录,你的问题只是与 IIS 有关
  • 什么意思?我在网络设置中有一个“创建虚拟目录”选项,没有删除。如何停止使用虚拟目录?

标签: asp.net-web-api iis-7.5 web-deployment


【解决方案1】:

首先,我建议使用诸如 Fiddler 之类的工具或您的网络浏览器的开发工具来进行网络跟踪并查看失败的请求是什么。

在我看来,最可能的罪魁祸首是虚拟目录不同,或者浏览器的 URL 不同,导致相对路径解析不正确。在客户端上使用相对路径通常是一件非常糟糕的事情,因为客户端通常不知道相对于 什么 URL 是什么。

我建议只添加一些这样的客户端代码:

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

这将声明一个包含应用程序“根”的 JavaScript 变量。然后,在页面的其他地方,您可以使用基本 URL 并附加相对路径的其余部分的代码:

<script>
    $.ajax(...., baseUrl + "api/getdata", ...);
</script>

【讨论】:

  • 谢谢。我正在使用提琴手,失败的网址正如我所描述的那样。我通过http://localhost/reporter 访问索引页面,虽然该页面中的脚本过去发布到http://localhost/reporter/api/getdata,但它们现在发布到http://localhost/api/getdata。我可以轻松解决这个问题,但我想知道发生了什么变化 - 以及为什么页面默认不再具有正确的基本 URL。
  • @Nicros,确实可能是这种情况,但我认为代码仍然不正确,因为它做出了无效的假设。我强烈建议在服务器代码中映射基本路径,然后将其用于客户端代码。可能还有其他与虚拟目录不同有关的问题。
  • 我认为这很公平。当我开始这个(因为它有效)时我在想,使用相对 url 很好 - 但显然情况并非如此 :) 映射该基本路径也是有意义的。
猜你喜欢
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2015-06-05
  • 2013-02-11
  • 1970-01-01
  • 2019-05-12
  • 2012-04-14
  • 2019-01-23
相关资源
最近更新 更多