【问题标题】:ajax GET call returns error after successful executing method on web api在 web api 上成功执行方法后,ajax GET 调用返回错误
【发布时间】:2013-12-28 08:06:58
【问题描述】:

背景:在aspx页面的iFrame控件中加载html页面

问题:我在 html 客户端主体的 onload 到 Web api 服务中有一个 Ajax 调用。服务器上的 GET 方法成功执行,但是当控制返回到客户端时,ajax 调用的错误部分执行,参数有错误作为响应文本.

Ajax 调用:

$.ajax({
    url: 'http://localhost:2940/api/wrds2/',
    type: "GET",
    data: { pOrdKey: OrderKey.toString(), pRptKey: ReportKey.toString(), pGroupKey: GroupKey.toString() },
    dataType: "json",
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
    success: function (data) {
        debugger;
        Err_jSonStr = data;  <--- Some Variable
        _FormData_Assigner(Err_jSonStr); -- Some function

    },
    error: function (x, y, z) {
        debugger;
        alert(x.responseText);
    }
});

CodeBehind - 网络方法:

public InterviewDFS Get(string pOrdKey, string pRptKey, string pGroupKey)
{
    try
    {
        InterviewDFS lObj_InterviewDFS = null;
        if (cObjADO_DAL == null)
            cObjADO_DAL = new AdoDotNetDataAccessLayer();
        lObj_InterviewDFS = cObjADO_DAL.GetInterviewDFS(pOrdKey, pRptKey, pGroupKey);
        return lObj_InterviewDFS;
    }
    catch (Exception)
    {

        throw;
    }
}

Web api 返回具有正确值的 lObj_InterviewDFS。
请找出可能的错误。


更新:经过一些试验,我发现当客户端页面在不同的项目中并且 web api 是不同的项目时,我会导致问题......!我知道您需要实施 cors,但我完全不知道。请给我解决方案

【问题讨论】:

  • 请将您的 ajax 输出也放在这里
  • 发布错误消息,并删除调试器警报响应
  • 1. x 和 y 变量以文本形式返回错误 2. x 的 ResponceText 属性返回 TEXT 未定义 3. ajax 调用返回客户端后控制台中的消息 ---------- ----------------------------------XMLHttpRequest 无法加载@ 987654321@。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:52466' 不允许访问

标签: jquery asp.net ajax json asp.net-web-api


【解决方案1】:

那是因为您使用从客户端到 API 的不同端口,它会被 HTTP 访问控制 (CORS) 阻止 因此,首先您需要启用 API 以接受您的 CORS 请求,您可以使用 web.config 来执行此操作,如下所示:

<httpProtocol>
  <customHeaders>
    <add name="Accept-Encoding" value="gzip, deflate, sdch" />
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, RequestVerificationToken, Content-Type, Accept" />
    <add name="Access-Control-Allow-Method" value="PUT, GET, POST, DELETE, OPTIONS, Accept" />
    <add name="Access-Control-Allow-Credentials" value="false" />
  </customHeaders>
</httpProtocol>

然后您需要将此标头放在您在 ajax jquery 上发出的每个请求上:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

【讨论】:

  • 如何在 Html 中提出请求时提及标头。 注意:你的机器上是否需要安装cors相关的包。
猜你喜欢
  • 1970-01-01
  • 2013-10-01
  • 2014-08-07
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多