【发布时间】:2015-05-06 13:39:03
【问题描述】:
我正在尝试编写将在每个服务上运行的自定义 RequestFilterAttribute,以检查请求是否具有有效令牌。我想在调用 CanExecute 方法后返回或设置一个对象,并将其转发给服务方法进行进一步处理。有没有办法在 ServiceStack 中做到这一点。
【问题讨论】:
标签: servicestack
我正在尝试编写将在每个服务上运行的自定义 RequestFilterAttribute,以检查请求是否具有有效令牌。我想在调用 CanExecute 方法后返回或设置一个对象,并将其转发给服务方法进行进一步处理。有没有办法在 ServiceStack 中做到这一点。
【问题讨论】:
标签: servicestack
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();
}
});
如果请求令牌有效,则请求将正常处理。
【讨论】: