Greens
Greens

Reputation: 3057

ServiceStack request filter Attribute set a custom object

I am trying to write a Custom RequestFilterAttribute that would run on every service to check if the request has a a valid token. I want to return or set an object once the CanExecute method is called and forward it to the service method for further processing. Is there a way to do that in ServiceStack .

Upvotes: 1

Views: 450

Answers (1)

mythz
mythz

Reputation: 143284

ServiceStack Request Filters lets you short-circuit a request so it does no further processing, to let a request go through you'd just ignore the request. One way to do this for specific Requests is to have them share a common interface which you can verify in your Request Filter, e.g:

public interface IValidateToken 
{
    string Token { get; }
}

public class MyRequest : IValidateToken 
{
    public string Token { get; set; }
}

Then in a Global Request Filter you can verify if the token is valid, otherwise return an error and short-circuit the request with something like:

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();
    }
});

If the Request Token is valid the request gets processed as normal.

Upvotes: 2

Related Questions