2

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"
4

6 に答える 6

1
  • HTTP リクエスト メソッドがPOSTクライアント ( html) とサーバー ( WCF service) にあることを確認してください
  • NetworkError 405 ステータスは、呼び出しコード ( html) が間違った HTTP メソッドを使用していることを示唆しているため、正常に動作していますWCF service

参照してください: WCF での 405 Method Not Allowed エラー

アップデート

私が信じているcontentType: "application/json"のは、パラメータータイプをinstringからに変更するだけなので、残りのもの(コンテンツタイプも)を保持することですintWCF service

    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";
    }
于 2013-02-12T11:22:24.497 に答える
1

定義したが間違っています。次のUriTemplateように使用してみてください。

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

そして、実装で、必要に応じてそれUserIdを int に変換します。

于 2013-02-14T06:19:19.587 に答える
0

WCF サービス プロジェクトと消費プロジェクト (AJAX 呼び出し) の両方を同時に (Visual Studio の同じインスタンスで) 実行していますか? その場合は、2 つの異なる VS インスタンスを試して、最初に WCF プロジェクトを実行し、次に使用するプロジェクトを実行します。また、代わりにdataTypeasを使用してみてください。jsonpjson

于 2013-02-12T11:29:07.073 に答える
0

ブラウザーの制限を回避するには、クロスドメイン呼び出しに JSONP を使用する必要があると思います

この回答は非常に役に立ちます: WCF エラー: 405 メソッドは許可されていません

于 2014-03-04T16:30:21.623 に答える
0

HTTP リクエスト メソッドが POST または OPTIONS であるかどうかを確認します。このリンクは役に立ちます。

于 2013-02-18T12:26:53.973 に答える