NetworkError:405方法在WCF中不允许

本文关键字:WCF 不允许 方法 NetworkError | 更新日期: 2023-09-27 17:58:42

我正试图使用Jquery ajax调用来调用WCF REST服务方法,但得到了类似的错误

"NetworkError: 405 Method Not Allowed - http://localhost:55911/Service1.svc/Testing"

这是我的代码

  $(document).ready(function () {
            $("#Button2").click(function () {
                 var Input = {
                     UserId: "11111"
                             };
                $.ajax({
                    type: "POST",
                    url: " http://localhost:55911/Service1.svc/Testing",
                    data: JSON.stringify(Input),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        alert("Success");
                    },
                    error: function (xhr, status, error) {
                        alert("failure");
                        alert(stattus.toString);
                    }
                });
            });
        });

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Testing", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string Testing(int UserId);

  public string Testing(int UserId)
        {
            sqlConn = new SqlConnection(connectionString);
            sqlConn.Open();
            sqlCmd = new SqlCommand("TestInsertion", sqlConn);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.Add("@id",UserId);
            sqlCmd.ExecuteNonQuery();
            sqlConn.Close();
            return "true";
        }

我在这里做错了什么??有什么建议吗??

编辑:在评论//contentType: "application/json"后,它发布并抛出

"NetworkError: 400 Bad Request - http://localhost:55911/Service1.svc/Testing"

NetworkError:405方法在WCF中不允许

  • 请检查客户端的HTTP请求方法是否为POSThtml)和服务器上(WCF service
  • 因为NetworkError 405状态表明调用代码(html)使用了错误的HTTP方法,WCF service工作正常

请参阅:WCF 中的405方法不允许错误

更新

我认为保留其余内容(还有内容类型contentType: "application/json"),因为它只是将参数类型从WCF service 中的int更改为string

    public string Testing(string UserId)
    {
        sqlConn = new SqlConnection(connectionString);
        sqlConn.Open();
        sqlCmd = new SqlCommand("TestInsertion", sqlConn);
        sqlCmd.CommandType = CommandType.StoredProcedure;
        sqlCmd.Parameters.Add("@id",UserId);
        sqlCmd.ExecuteNonQuery();
        sqlConn.Close();
        return "true";
    }

您定义的UriTemplate是错误的,请尝试这样使用:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/Testing?U={UserId}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string Testing(string UserId);

然后在实现中根据需要将UserId转换为int。

通常当向您的方法抛出异常时会发生这种错误,因此我建议调试

它要么通过在的开头写入这行代码来将其附加到进程

功能

Debugger.launch();

您是否同时运行WCF服务项目和消费项目(AJAX调用)(在Visual Studio的同一实例中)?如果是这样,请尝试两个不同的VS实例,并首先运行WCF项目,然后运行消耗项目。另外,尝试使用dataType作为jsonp,而不是json

检查HTTP请求方法是POST还是OPTIONS。此链接将非常有用。

我认为您需要使用JSONP进行跨域调用,以绕过浏览器限制

这个答案非常有用:WCF错误:405方法不允许