首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebGet JSON复参数

WebGet JSON复参数
EN

Stack Overflow用户
提问于 2014-03-13 00:35:10
回答 1查看 329关注 0票数 0

服务方法如下所示

代码语言:javascript
复制
public class UploadItem
{
  public string fileName { get; set; }
  public string fileDesc { get; set; }
}
[OperationContract, WebGet]
public int WriteUploadItem(UploadItem uploadItem)
{
  //implementation
}

调用如下所示

代码语言:javascript
复制
var data = {
  fileName: self.fileName(),
  fileDesc: self.fileDesc(),
};

$.ajax({
  url: "Fx.svc/WriteUploadItem",
  data: { uploadItem: data },
  success: function (result) {
    //implementation
  },
  error: function (result) { alert($.parseJSON(result.responseText).Message); }
});

会产生这个

代码语言:javascript
复制
GET http://localhost:49701/Fx.svc/WriteUploadItem?uploadItem%5BfileName%5D
=2014-01-21.gif&uploadItem%5BfileDesc%5D=adesgfA HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: */*
Referer: http://localhost:49701/index.html#upload-queue
Accept-Language: en-AU,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:49701
DNT: 1
Connection: Keep-Alive

这些URL编码参数在解码时如下所示

代码语言:javascript
复制
uploadItem[fileName]=2014-01-21.gif&uploadItem[fileDesc]=adesgfA 

调用WebGet方法,但参数为null。

我正在成功地将一个参数传递给另一个方法,如

代码语言:javascript
复制
var userId = "73c2e254-5440-45eb-9099-58fa08dd037b"; // me.UserID();
$.ajax({
  url: "Fx.svc/UserFiles",
  data: { userId: userId },
  success: function (result) {
    //implementation
  },
  error: function (result) { alert($.parseJSON(result.responseText).Message); }
});

据我所见,唯一的区别是参数的值是不同的。最初,有更多的字段,但我删除了更麻烦的数据类型,并好奇地发现,即使是简单的字符串也会出现问题。

怎么了,我该怎么办?我需要在C# UploadItem类上添加某种属性吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 00:56:27

$.ajax()使用的默认编码是application/x-www-form-urlencoded

要解决这个问题,请控制编码,并告诉另一端使用了什么编码。注意对象的显式字符串化,以及text/jsoncontentType的显式编码。

代码语言:javascript
复制
var data = {
  fileName: self.fileName(),
  fileDesc: self.fileDesc(),
};

$.ajax({
  url: "Fx.svc/WriteUploadItem",
  data: JSON.stringify(data),
  contentType: "text/json"
}).done(function (result) { 
  //implementation
}).error(function (err) { 
  //handle error
});

您指定的内容类型编码也将用于返回值,除非您指定了不同的编码。通常,获得JSON是非常令人满意的,因为$.ajax()将神奇地将其解析为结果对象,但是当您返回一个简单类型(如int )时,需要使用dataType参数指定文本/纯文本的返回编码。

代码语言:javascript
复制
$.ajax({
  url: "Fx.svc/WriteUploadItem",
  data: JSON.stringify(data),
  contentType: "text/json",
  dataType: "text/plain"
}).done(function (result) { 
  //implementation
}).error(function (err) { 
  //handle error
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22366814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档