【问题标题】:Asp.Net WebApi $.get works in Development but fails when deployed to IISAsp.Net WebApi $.get 在开发中工作,但在部署到 IIS 时失败
【发布时间】:2012-07-26 02:13:38
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    假设您的 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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为您不能在 javascript 块中使用 Razor/MVC 标签。这是我的测试块:
      • 当您说I dont think you can use Razor/MVC tags in javascript blocks 时,您是否尝试过输入我的建议?是否抛出错误(运行时/编译时)?
      • 您绝对可以在 Razor 页面的任何位置使用 Razor
      • 已在问题中添加了整个页面的标记。我还更改了 $.get 链接以使用 ResolveClientUrl 并得到一个不同的错误。它现在正在尝试通过以下方式访问 url:localhost:61882/%3C%=%20ResolveClientUrl(%22api/…
      • 关于在 Javascript 中嵌入 Razor:stackoverflow.com/questions/4204669/…
      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2018-07-01
      相关资源
      最近更新 更多