Asp.Net WebApi $ .get在开发中工作但在部署到IIS时失败

时间:2012-07-26 02:13:38

标签: jquery asp.net html asp.net-mvc razor

我有以下简单的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>

2 个答案:

答案 0 :(得分:0)

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

<script src="<%= ResolveClientUrl("~/Scripts/jQuery-v1.x.js") %>" type="text/javascript"></script>

答案 1 :(得分: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);