1

有没有办法拦截所有命中您服务的 http 请求?

例子:

请求http://host/Account/Create在一个地方捕获并重定向到正确的服务。

请求http://host/Account/Delete/1在一个地方捕获并重定向到正确的服务。

是否有捷径可寻?

4

1 回答 1

2

如果您想了解过滤器如何运作的具体细节,您可以查看ServiceStack的操作顺序。

APreRequestFilter可能是您想要的,如果您只想通过Request.PathInfo.

PreRequestFilter将为每个请求触发,但您的 DTO 不会被反序列化。请参阅 ServiceStack 自己的RequestLogsFeature.cs中的示例用法

对于我的场景,我使用RequestFilters这样我就可以先根据类型做出决定,然后在需要requestDto.GetType()时回退。httpReq.PathInfo但是,这只会触发 REST 请求。

我在我的 AppHost 类中做了这样的事情:

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
    if (AppConfig.RequireSsl) 
        new RequireSslAttribute().Execute(httpReq, httpResp, requestDto);

    // Force authentication if the request is not explicitly made public
    if (!AppConfig.IsPublic(httpReq, requestDto.GetType()))
        new AuthenticateAttribute().Execute(httpReq, httpResp, requestDto);
});
于 2013-11-12T00:58:33.377 回答