我正在查看AppHostBase.cs,它有以下内容:

//....
public IContentTypeFilter ContentTypeFilters {
    get {return EndpointHost.ContentTypeFilter;}
}
public List<Action<IHttpRequest, IHttpResponse>> PreRequestFilters {
    get {return EndpointHost.RawRequestFilters;}
}
public List<Action<IHttpRequest, IHttpResponse, object>> RequestFilters {
    get {return EndpointHost.RequestFilters;}
}
public List<Action<IHttpRequest, IHttpResponse, object>> ResponseFilters {
    get {return EndpointHost.ResponseFilters;}
}
//....

我阅读了党卫军网站的文件,知道什么是RequestFiltersResponseFilters。但是为什么有一个PreRequestFilterRequestFilters分开?这是干什么的?
我在google上看到了一个用PreRequestFilters编写的signalr代码的例子,为什么不直接用RequestFilters来编写呢?有什么区别?

最佳答案

根据Order of Operations,在dto反序列化之前执行预请求过滤器,然后执行常规请求过滤器。还要注意,请求过滤器是按特定顺序执行的,这取决于它们是作为属性实现的还是通过apphost注册的,还取决于请求过滤器属性的优先级。

10-08 02:58