[英]How can I make a WCF Data Service Query Interceptor return results in JSON?
我目前在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
})
这按预期工作,返回包含Entities表中所需对象的javascript对象。
但是,我们希望在服务器端添加一些智能,以限制从此查询返回的结果。 为此,我尝试在前面提到的MyDataService
类中实现Query Interceptor:
[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
这个特殊的错误导致我猜测,由于某种原因,我实现的Query Inspector返回的数据是XML格式,而不是像我在实现拦截器之前的查询那样进入JSON。
我无法找到任何相关说明。 如何在Query Interceptor中强制执行JSON响应行为?
有关查询拦截器的使用请参阅此内容: http : //msdn.microsoft.com/en-us/library/dd744842.aspx
我很惊讶上面甚至开始服务(我怀疑它没有,你得到一个错误的有效载荷,因此无法读取它,你可以尝试用例如Fiddler确认)。
Query拦截器返回一个谓词(Expression),它在执行之前被添加到查询中。 因此,您无法返回新查询,只需修改现有查询即可。
在上面的示例中,只需像下面这样修改它:
[QueryInterceptor("Entities")]
public Expression<Func<Entity,bool>> OnQueryFares()
{
return e => DataCheck(e);
}
这是一个扩展版本
[QueryInterceptor("Entities")]
public Expression<Func<Entity,bool>> OnQueryFares()
{
// Assuming e has two properties Name and Age.
return e => e.Name=="John" && e.Age=23 ;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.