我制作了自定义 HttpModule,它搜索 $where 参数,更改它(用 DateTime.UtcNow 替换 DateTime.Now)并重写路径。简化的模块实现如下所示:
private void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
string whereQuery = app.Request.QueryString["$where"];
string newWhereQuery = this.ChangeWhereQuery(whereQuery);
// Combine new where query string with other query strings
string newQueryString = this.BuildQueryString(app, newWhereQuery);
app.Context.RewritePath(app.Request.FilePath, app.Request.PathInfo, newQueryString);
}
问题是重写后查询表达式丢失,即在DomainService的Query方法中queryDescription.Query为null:
public override IEnumerable Query(QueryDescription queryDescription, out IEnumerable<ValidationResult> validationErrors, out int totalCount)
{
// queryDescription.Query is null
return base.Query(queryDescription, out validationErrors, out totalCount);
}
如果我用以下代码替换我的自定义模块(路径用原始查询字符串重写),一切正常:
private void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
string qs = app.Request.QueryString.ToString();
app.Context.RewritePath(app.Request.FilePath, app.Request.PathInfo, qs);
}
我在 Silverlight 论坛上找到了这篇文章,但线程 URL 不再可用:
WCF RIA 服务本身使用 URL 重写,因此可能会发生冲突。这是一个带有解决方案的最近线程: http ://forums.silverlight.net/forums/p/233310/573340.aspx#573340
任何想法为什么在更改 URL 查询字符串后查询表达式会丢失?
我正在使用 WCF RIA Services V1.0 SP2、.NET 4 和 IIS 7。