有没有办法拦截所有打到你服务的http请求?
示例:
http://host/Account/Create
请求在一个地方被捕获并重定向到正确的服务。
请求http://host/Account/Delete/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);
});