WCF 返回 JSONP 或自定义结果格式
Posted
技术标签:
【中文标题】WCF 返回 JSONP 或自定义结果格式【英文标题】:WCF returning a JSONP or custom result format 【发布时间】:2014-12-19 09:31:14 【问题描述】:嗯,我有一个 WCF 服务,它返回一个包含一些我需要使用的属性的自定义对象。
[DataContract]
public class CommonJsonResponse
[DataMember]
public object Data get; set;
[DataMember]
public bool Success get; set;
[DataMember]
public int StatusCode get; set;
private string errorMessage;
[DataMember]
public string ErrorMessage
get
return errorMessage;
set
errorMessage = value;
if (!string.IsNullOrEmpty(value))
Success = false;
public CommonJsonResponse()
Success = true;
我的所有服务方法都将返回此对象以及 Data
属性内的其他所需数据。我有这样的方法:
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public CommonJsonResponse DoSomething(int value, string callback)
var response = new CommonJsonResponse();
response.Data = JsonConvert.SerializeObject(
GetItemIntoDatabaseByGivenValue(value));
return response;
$.ajax(
url: serviceUrl + '/DoSomething',
type: 'GET',
dataType: 'jsonp',
contentType: 'application/json; charset=utf-8',
data: value: 1 ,
success: function(response)
console.log(response);
,
error: function(xhr, response, error)
console.log(xhr);
console.log(xhr.responseText);
if (xhr.responseText)
var err = xhr.responseText;
if (err)
error(err);
else
error( Message: "Unknown server error." )
);
好的,一旦我想使用跨域,我的想法是返回一个JSONP
对象。我知道 AJAX 在请求字符串中添加了一些参数——比如上面的 callback
参数。我也知道,为了正确返回 JSONP
对象,我需要执行以下操作:
var properlyResult = callback + "(" + response + ");";
好的,既然我的方法返回一个CommonJsonResponse
,有没有办法覆盖将响应添加到HttpContext
?我的意思是,这个想法是获取CommonJsonResponse
对象将被发送并将其包装到上面的字符串中以生成正确的结果,然后将这个正确的结果放入HttpContext
将被发送回浏览器。
感谢您的帮助! :)
【问题讨论】:
【参考方案1】:问题解决了。
我用过这个link:
感谢rich.okelly(第一个答案)提示.NET framework 4.0+ 对JSONP
进行原生解析。
也感谢Rachit Patel(第二个答案)对webHttpBinding
的crossDomainScriptAccessEnabled
属性提示。
【讨论】:
以上是关于WCF 返回 JSONP 或自定义结果格式的主要内容,如果未能解决你的问题,请参考以下文章
Unity NGUI UIPanel下对粒子或自定义Mesh的剪裁