【问题标题】:WCF returning a JSONP or custom result formatWCF 返回 JSONP 或自定义结果格式
【发布时间】: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 将被发送回浏览器。

感谢您的帮助! :)

【问题讨论】:

    标签: c# ajax json wcf jsonp


    【解决方案1】:

    问题解决了。

    我用过这个link:

    感谢rich.okelly(第一个答案)提示.NET framework 4.0+ 对JSONP 进行原生解析。

    也感谢Rachit Patel(第二个答案)对webHttpBindingcrossDomainScriptAccessEnabled 属性提示。

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2013-06-23
      • 1970-01-01
      • 2013-10-24
      • 2013-12-27
      • 1970-01-01
      相关资源
      最近更新 更多