【问题标题】:How to call wcf service using ajax如何使用ajax调用wcf服务
【发布时间】:2019-03-02 06:04:32
【问题描述】:

我正在尝试通过 ajax 调用调用 WCF 服务。这是我的 ajax 调用:

     $j.ajax(
            {
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                context: this,
                async: false,
                url: appServicePath + "Student/GetRolesByUserId",
                data: JSON.stringify({ "userId": userId }),
                success: this.getRolesByIdResponse,
                error: this.getRolesByIdFailure
            }
        );

当我使用 Fiddler 测试我的服务时,我能够获取我从 ajax 传递其值的用户角色,但是当我从我的应用程序调用服务时,我得到一个错误:405 Method Not Allowed。 我做错了什么?

【问题讨论】:

    标签: asp.net ajax rest wcf webforms


    【解决方案1】:

    根据你的描述,我认为这个问题是由于跨域造成的,该问题生成了一个OPTIONS请求,所以该方法是不允许的。如果你把脚本和webservice放在同一个域中,就不会出现这个问题。

    这里是 Http 405 方法文档。

    https://www.rfc-editor.org/rfc/rfc7231#section-6.5.5

    您现在需要为托管在 Web 服务器端的 WCF 应用程序打开跨域支持。

    Web.config

    <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="content-type" />
        <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
      </customHeaders>
    </httpProtocol>
    

    Global.asax

    protected void Application_BeginRequest(object sender, EventArgs e)
        {
            if (Request.Headers.AllKeys.Contains("Origin")&&Request.HttpMethod=="OPTIONS")
            {
                Response.End();
            }
        }
    

    如果您有任何问题,请随时与我联系。

    【讨论】:

      猜你喜欢
      • 2016-01-20
      • 2015-04-27
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多