0

ajax呼び出しを行うときに、dataTypeとcontentTypeが必要かどうか疑問に思っていました。私はウェブにかなり慣れていないので、混乱しています。サーバー側には、2 つのパラメーターを持つオブジェクトを想定している servicestack エンドポイントがあります。

[DataMember(IsRequired = true)]
        public long Id { get; set; }  

        [DataMember]
        public IEnumerable<long> Libraries { get; set; }

だから私のajax呼び出しで、私はこれを試します:

$.ajax({
                url: 'bookshelf/' + Id + '/libraries',
                type: "POST",
                crossDomain: $.support.cors,
                data: JSON.stringify(libraryIds),
                xhrFields: {
                    withCredentials: $.support.cors
                },
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    console.log("success");

このエンドポイントに到達しようとすると、400 Bad Request が返されます。しかし、dataType と contentType: をコメントアウトすると、500 内部サーバー エラーが発生します。エンドポイントがヒットしない理由をデバッグするために、その理由と何が起こっているのかを理解しようとしています。前もって感謝します。

4

1 に答える 1

1

私はあなたを助けることができるかどうかわかりません。次のコードを使用します(例に基づいて)

クライアントモデルで

      public class BookRequest
      {
        public int Id { get; set; }
        public string  name { get; set; }
        public string author { get; set; }
     }
       public class LibraryResponse
      {
       public bool TitleExists{ get; set; }
       public int Quantity { get; set; }
      }

次に、AppHost.Configure にルートを追加します。

           Routes.Add<BookRequest>("/bookshelf/{Id}/libraries", "POST,  OPTIONS");

JavaScriptコード

           jQuery.support.cors = true;

        function BookRequestCall() {
              var  BookRequest = new Object();
               BookRequest.name = "Harry Potter";
              var Id = 33;

              var LibraryResponse;

          $.ajax({
              type: 'Post',
              contentType: 'application/json',         
              url: serverIP +'/bookshelf/' + Id + '/libraries',
              data: JSON.stringify( BookRequest ),
              dataType: "json",
              success: function (response, status, xhr) {

                      LibraryResponse = response;

               },
               error: function (xhr, err) {
                  alert(err);
               }
          });
       }

サービス側

       public LibraryResponse Post(BookRequest request)
      {
        //    request.Id =33 - request.name="Harry Potter" - request.author=null

        LibraryResponse response = new LibraryResponse();
          response.TitleExists=true;
          response.Quantity=10;
            return response;

      }
于 2013-09-13T22:18:03.887 に答える