我正在尝试编写一个自定义RequestFilterAttribute,它将在每个服务上运行,以检查请求是否具有有效令牌。我想在调用CanExecute方法后返回或设置一个对象,并将其转发到服务方法以进行进一步处理。有没有办法在ServiceStack中做到这一点。
答案 0 :(得分:2)
ServiceStack请求过滤器允许您将请求短路,以便不进行进一步处理,让请求通过您只是忽略该请求。为特定请求执行此操作的一种方法是让它们共享一个可在请求筛选器中验证的公共接口,例如:
public interface IValidateToken
{
string Token { get; }
}
public class MyRequest : IValidateToken
{
public string Token { get; set; }
}
然后在全局请求过滤器中,您可以验证令牌是否有效,否则返回错误并使用以下内容将请求短路:
GlobalRequestFilters.Add((httpReq, httpRes, dto) => {
var tokenRequest = dto as IValidateToken;
if (tokenRequest != null && !MyValidateToken(tokenRequest.Token))
{
httpRes.StatusCode = (int) HttpStatusCode.Forbidden;
httpRes.StatusDescription = "Token is invalid";
httpRes.EndRequest();
}
});
如果请求令牌有效,请求将正常处理。