0

我有以下简单的 jquery get 语句,它在我的服务器上调用 WebApi:

$.get('api/DataAPI?tenantId=1&datatype="Contacts"&actionname="ActiveOnly"', GetDataRetrieved);

这在视觉工作室中运行良好。我检查了 chrome 中的网络流量,它显示创建了以下请求:

http://localhost:61882/api/DataAPI?tenantId=1&datatype=%22Contacts%22&actionname=%22ActiveOnly%22

我现在已经将我的网站部署到 IIS,API 调用现在失败,找不到 404。我检查了chrome中的网络流量,可以看到问题:

http://localhost/api/DataAPI?tenantId=1&datatype=%22Contacts%22&actionname=%22ActiveOnly%22

部署到 IIS 时的网站位于http://localhost/MyWebSite. 所以电话应该转到:

http://localhost/MyWebSite/api/DataAPI?tenantId=1&datatype=%22Contacts%22&actionname=%22ActiveOnly%22

我的 $.get 调用中的正确语法是什么,以便它适用于 Visual Studio 并部署到 IIS(我很想使用 razor @Url.Content 但这在 javascript 块中不起作用)?

提前致谢

编辑:这是整个 .cshtml 页面的标记:

@{
ViewBag.Title = "MyWebSite";
Layout = "~/Views/Shared/SiteLayout.cshtml";
}

@section HeaderContent
{
<script type="text/javascript" src="@Url.Content("~/assets/scripts/App/Base64EncodeDecode.js")"></script>
 }

<script type="text/javascript">   
    $(function () {               
    $("#TestButton").click(function () {            
        $.get('api/DataAPI?tenantId=1&datatype="Contacts"&actionname="ActiveOnly"', GetDataRetrieved);
    });
});

function GetDataRetrieved(data) {        
     //alert(base64_decode(data));
    alert(data);
}   
</script>

<button id="TestButton">Test Button</button>
4

2 回答 2

0

您可能需要将相对 URL 添加到您的 jQuery 和其他 .js 文件路径,即

<script src="<%= ResolveClientUrl("~/Scripts/jQuery-v1.x.js") %>" type="text/javascript"></script>
于 2012-07-26T02:17:29.437 回答
0

假设您的 Javascript 直接位于页面上:

$.get('@Url.Action("DataAPI", "API", new {tenantId = 1, datatype = "Contacts", actionname="ActiveOnly"})', GetDataRetrieved);

应该是你需要的

如果它在另一个页面上,我喜欢将所需的 URL 与 HTML 元素相关联,然后使用 jQuery 来提取它。

<div id='foo' data-url='@Url.Action("DataAPI", "API")'>
</div>

然后你的 Javascript 看起来像:

$.get($('#foo').data('url'), {tenantId: 1, datatype: "Contacts", actionname: "ActiveOnly"}, GetDataRetrieved);
于 2012-07-26T02:43:27.203 回答