服务栈拦截所有Http服务

时间:2013-11-10 23:55:41

标签: c# .net http servicestack

有没有办法拦截所有打到你服务的http请求?

示例:

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

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

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:2)

如果您想了解过滤器如何运作的具体细节,您可以看到ServiceStack的Order of Operations

PreRequestFilter可能是您想要的,如果您只想通过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);
});