0

我想知道在进行 ajax 调用时是否需要 dataType 和 contentType。我对网络很陌生,而且很困惑。在服务器端,有一个 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 Internal server error。我试图了解为什么会这样以及发生了什么,以便调试为什么我的端点没有被击中。提前致谢。

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 中,我添加了 Route

           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 回答