gpt4 book ai didi

c# - 以正确的 WCF 格式返回 JSONP

转载 作者:太空狗 更新时间:2023-10-29 21:05:56 25 4
gpt4 key购买 nike

我正在尝试输出一个正确包装的 JSONP 值以供 jQuery 使用。

我正在寻找的输出是:

jsoncallback({"Status": "OK"})

但是它正在输出的 atm:

"jsoncallback({"Status": "OK"})"

显然这不是正确的 JSONP 格式,因为 jQuery 请求无法处理响应。

我在 C# 中的 OperationContract 是:

[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "returndata?s={s}")]
Stream EchoWithGet(string s);

public string EchoWithGet(string s)
{
string json = @"jsoncallback({'Status':'OK'})";
Console.WriteLine("Call Made: " + s);
return json;
}

我已经尝试使用 JSON.NETSystem.Web.Script 命名空间来使用 JavaScriptSerializer

但对我来说没有任何用处,我真正想做的就是去掉两个双引号。

最佳答案

如果您使用 jQuery 提交 ajax 请求并请求 dataType: "jsonp",jQuery 将在请求中传递回调函数的名称(例如,/returndata? s=hello&callback=jquery123456789),因此在这种情况下返回常量“jsonCallback”将不起作用。

此外,在您的问题中,操作契约(Contract)定义返回 Stream,而在操作本身上您返回 string - 那里出了点问题。

您需要做什么:您有两个选择。第一个是让 WCF 为您处理 JSONP 填充。您的操作需要返回具有属性“Status”的数据类型,然后返回它。您还需要在端点使用的 WebHttpBinding 上启用 CrossDomainScriptAccessEnabled 属性。您的操作类似于以下代码:

public class MyType
{
public string Status { get; set; }
}

[ServiceContract]
public class Service
{
[WebGet(UriTemplate = "returndata?s={s}")]
public MyType ReturnData(string s)
{
return new MyType { Status = "OK" };
}
}

第二个选项,如果您想自己创建 JSONP 代码,可以在 URI 中为回调函数名称获取一个附加参数,然后在创建响应时使用它。您还需要将其作为 Stream 返回,这样您就不会得到字符串形式的响应(这可能是您现在拥有的)。看起来像这样:

[ServiceContract]
public class Service
{
[WebGet(UriTemplate = "ReturnData?s={s}&callback={callbackFunctionName}")]
public Stream EchoWithGet(string s, string callbackFunctionName)
{
string jsCode = callbackFunctionName + "({\"Status\":\"OK\"});";
WebOperationContext.Current.OutgoingResponse.ContentType = "application/javascript";
return new MemoryStream(Encoding.UTF8.GetBytes(jsCode));
}
}

此 jQuery 代码可用于访问此服务:

    function StackOverflow_11090835_Test() {
var url = "/StackOverflow_11090835.svc/ReturnData";
var data = { s: "Hello world" };
$.ajax({
type: 'GET',
url: url,
data: data,
dataType: "jsonp",
success: function (result) {
$("#result").text(result.Status);
}
});
}

关于c# - 以正确的 WCF 格式返回 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com