【发布时间】:2012-06-23 01:30:10
【问题描述】:
我目前在www.mywebsite.com 有一个 WCF 数据服务。这是一个看起来像这样的基本服务:
namespace MyWeb
{
[JSONPSupportBehavior]
public class MyDataService : DataService<MyEntities>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("Entities", EntitySetRights.AllRead);
ServiceOperationRights.All);
}
}
}
目前,我们有一些现场客户通过发布 ajax 调用来发出请求,例如:
$.ajax({
url: serverAddress + "MyDataService.svc/Entities?$top=20&$filter=IsConfirmed%20eq%20null&$format=json&$callback=?",
headers: {
version: "1.0",
platform: "a platform"
},
timeout: 12000,
dataType: 'jsonp',
cache: false,
context: document.body
})
这按预期工作,返回一个包含实体表中所需对象的 javascript 对象。
但是,我们希望在服务器端添加一些智能,以限制可以从此查询返回的结果。为此,我尝试在上述MyDataService 类中实现查询拦截器:
[QueryInterceptor("Entities")]
public IQueryable<Entity> OnQueryFares(IQueryable<Entity> query)
{
return from e in query
where DataCheck(e)
select e;
}
按照预期的逻辑,服务现在将只返回 DataCheck(e) 评估为 true 的表条目。此功能似乎可以工作。但是,在使用客户端进行测试时,我收到以下错误:
Web Console(4448): Uncaught SyntaxError: Unexpected token < at
http://www.mywebsite.com/MyDataService.svc/Entities?$top=20&$filter=IsConfirmed%20eq%20null&$format=json&$callback=jQuery17207441281890496612_1340223164872&_=1340223166622:1
这个特殊的错误让我猜测,出于某种原因,我实现的查询检查器返回的数据是以 XML 形式出现的,而不是像我实现拦截器之前的查询那样以 JSON 形式出现。
我找不到任何关于此的说明。如何在查询拦截器中强制执行 JSON 响应行为?
【问题讨论】:
-
你用 Fiddler 跟踪请求和响应了吗?
-
@Pratik Fiddler 似乎假设有问题的客户端是台式电脑,但事实并非如此。
标签: c# ado.net jsonp wcf-data-services