带过滤器的ServiceStack IP restiction

时间:2016-02-17 14:51:25

标签: c# .net servicestack httpserver

在我的ServiceStack应用程序中,我试图重写除了白名单中存在IP的用户以外的所有用户,我发现这样做的唯一方法是在我的Configure方法中使用PreRequestFilters:

PreRequestFilters.Add((req, res) =>
{
    if (!ipWhiteList.Contains(req.RemoteIp))
    {
        res.ContentType = req.ResponseContentType;
        res.StatusCode = (int)HttpStatusCode.Unauthorized;
        res.Dto = DtoUtils.CreateErrorResponse("401", "Unauthorized", null);
        res.EndRequest();
    }
});

这是否可以通过自定义身份验证过滤器实现(如果可以的话)?也许有一些开箱即用的功能允许这样做或只是最佳实践可以遵循?

1 个答案:

答案 0 :(得分:2)

您也可以使用Request Filter Attribute,例如:

public class ValidateIpAttribute : RequestFilterAttribute 
{
    public IpValidator IpValidator { get; set; }

    public void RequestFilter(IRequest req, IResponse res, object requestDto)
    {
        if (IpValidator.Allow(req.RemoteIp))
            return;

        res.ContentType = req.ResponseContentType;
        res.StatusCode = (int)HttpStatusCode.Unauthorized;
        res.Dto = DtoUtils.CreateErrorResponse("401", "Unauthorized", null);
        res.EndRequest();
    }
}

然后您可以在服务中使用,例如:

[ValidateIp]
public class ProtectedServices : Service
{
}