1

我制作了自定义 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。

4

1 回答 1

0

我链接到的线程可能是这个: http ://social.msdn.microsoft.com/Forums/en-US/silverlightwcf/thread/c6ab7061-19ce-4bd9-8afe-cfbdc7fd9267/

不过,在这里查看您的扩展问题,我认为您正试图在错误的地方加入。在 DomainService 本身中,每个查询都是通过虚拟 Query 方法进入的。如果您覆盖 Query 方法,那么您应该能够在将 QueryDescription 发送到 base.Query 方法之前对其进行修改。

于 2013-01-02T16:19:37.953 回答