Tag: jsonp

使用asp.net webapi实现oData inlinecount

可能重复: 使用WebApi进行OData分页($ inlinecount) 由于Asp.net WebAPi几乎支持odata,因此我非常喜欢让$ inlinecount工作,以便它与kendo ui(或任何其他)很好地协作。 因此它以jsonp格式返回值,我实现了一个新的MediaFormatter(来自Stackoverflow)。 麻烦的是它需要结果才能在其中包含count元素以使服务器端分页工作,所以现在我攻击了格式化程序以获得虚假计数。 这一切都很好,并且网格都很开心,但是真正的计数是一个挑战,因为返回的IQueryable表达式已经应用了filter/ Take等。 public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) { string callback; if (IsJsonpCountableRequest(out callback)) { return Task.Factory.StartNew(() => { var q = value as IQueryable; var count = q.Count(); // this count doesnt return the actual count var writer […]

ServiceStack – 使用gzip / deflate压缩和JSONP请求

我有一个ServiceStack服务,使用RequestContext.ToOptimizedResult()压缩响应,例如: [Route(“/numbers/search”)] public class FindNumbers { } public object Get(FindNumbers query) { var data = new List { “One”, “Two”, “Three” }; return RequestContext.ToOptimizedResult(data); } 这在发出如下请求时非常有效: GET http://myhost:13487/numbers/search.json 并使用Accept-Encoding请求标头按预期压缩: Accept-Encoding: gzip,deflate,sdch 我也可以发出JSONP请求: GET http://myhost:13487/numbers/search?callback=func 正确返回application/javascript回调(未压缩)。 问题 当我将Accept-Encoding请求标头添加到JSONP请求时,响应是根据原始JSON请求的压缩JSON数据,而不是压缩的application/javascript回调。 是否有任何明显的原因导致我对此行为缺失,或者它只是ServiceStack中的一个错误? 我的期望是在响应中接收压缩的JSONP回调,但我对JSONP相当绿色,并且可能有一个很好的理由进行回退。 请注意,我正在通过ServiceStack源进行工作,但我想我会在那里得到它,因为更多的大脑比一个更好… 提前致谢 编辑 所以,我已经从以下来源追踪了这个问题 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/Handlers/GenericHandler.cs#L79 和 https://github.com/ServiceStack/ServiceStack/blob/5d09d439cd1a13712411552e2b3ede5a71af2ee5/src/ServiceStack/Host/RestHandler.cs#L107 if (doJsonp && !(response is CompressedResult)) return httpRes.WriteToResponse(httpReq, response, […]

以适当的格式返回JSONP WCF

我正在尝试为jQuery输出正确包装的JSONP值以供使用。 我正在寻找的输出是: jsoncallback({“Status”: “OK”}) 但它的输出是: “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.NET以及System.Web.Script命名空间来使用JavaScriptSerializer 。 但是没有什么对我有用,我真正想做的就是摆脱两个双引号。

如何反序列化JSONP响应(最好使用JsonTextReader而不是字符串)?

我正在尝试使用声称返回JSON的Web服务,但实际上总是返回JSONP。 我没有看到改变该服务行为的方法。 我想用NewtonSoft Json.Net来解析结果。 我已经声明了一个类,我们将其称为MyType,我希望将内部JSON结果反序列化为。 JSONP: parseResponse({ “total” : “13,769”, “lower” : “1”, “upper” : “20”}) 正如您所看到的,这不是正确的JSON,因为它具有parseResponse(前缀和)后缀。 虽然这个例子非常简单,但实际响应可能很长,大约为100K。 我的风格: public class MyType { public Decimal total; public int lower; public int upper; } 在我将Web服务响应转换为流和JsonTextReader之后,我尝试反序列化,如下所示: (MyType)serializer.Deserialize(jsonTextReader, typeof(MyType)); 当然,我得到一个结果为null,因为有圆括号的那个讨厌的parseResponse。 我已经看过这个问题 ,遗憾的是没有帮助。 我实际上是使用JsonTextReader来输入JSON,而不是字符串(并且更喜欢这样以避免创建巨大字符串的性能)。 即使我使用该问题的建议,它看起来很危险,因为它使用全局替换。 如果没有好的方法来使用流,那么安全解析字符串的答案就可以了。

WCF错误:405方法不允许

坚持这个问题。 我有一个包含2个项目的解决方案,其中一个是带有jquery ajax调用的普通旧html,而另一个是WCF服务。 html页面将发出对WCF服务的ajax调用以获取json字符串并将其用于显示目的。 现在的问题是每当我在调试模式下运行时,html页面和WCF都将以不同的端口启动。 当我执行测试时(即在Firefox中调用类型= OPTIONS获得405 Method Not Allowed错误),这为我创建了一个跨源问题。 我会在我的ajax脚本上检查调用方法,并且WCF服务是相同的(GET)。 我搜索谷歌但发现要么我必须安装扩展程序或在IIS上执行一些配置,我发现这很麻烦,因为我正在做的事情很简单。 下面是一个例子,我将在web.config中添加以下配置,但它不起作用: 任何人都有任何想法摆脱这个恼人的问题? 编辑:只是添加,我正在使用与VS Studio 2012一起提供的IIS Express运行调试 添加WCF代码并更新web.config [ServiceContract] public interface IMemberInfo { [WebInvoke(Method = “GET”, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json )] [OperationContract] string GetMemberInfoById(); // TODO: Add your service operations here } 我的剧本: $(document).ready(function () { $.ajax(“http://localhost:32972/SimpleMemberInfo.svc/GetMemberInfoById”, { cache: false, beforeSend: function […]

如何为现有的WCF服务本机启用JSONP?

我有一个像以下方法的现有服务: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] public class SomeService : ISomething { public SomeListResults SomeList(SomeParams someParams) { …. } } 是否有一种简单的方法可以同时允许JSONP调用和JSON(检测它)。 这是原生的吗?