servicestack ServiceStack方法的自定义属性,servicestack,servicestack" /> servicestack ServiceStack方法的自定义属性,servicestack,servicestack" />

servicestack ServiceStack方法的自定义属性

servicestack ServiceStack方法的自定义属性,servicestack,servicestack,我正在尝试为ServiceStack服务创建一个自定义属性,通过它我可以控制服务类中的每个方法 这是我正在实现的属性类 [AttributeUsage(AttributeTargets.Method|AttributeTargets.Class , Inherited = false, AllowMultiple = false)] public class MyRequestFilterAttribute:RequestFilterAttribute { public string

我正在尝试为ServiceStack服务创建一个自定义属性,通过它我可以控制服务类中的每个方法

这是我正在实现的属性类

[AttributeUsage(AttributeTargets.Method|AttributeTargets.Class , Inherited = false, AllowMultiple = false)]
public class MyRequestFilterAttribute:RequestFilterAttribute
{

    public string Provider { get; set; }

    public MyRequestFilterAttribute(ApplyTo applyTo): base(applyTo)
    {
        this.Priority = (int) RequestFilterPriority.Authenticate;
    }

    public MyRequestFilterAttribute():this(ApplyTo.All)
    {

    }

    public MyRequestFilterAttribute(ApplyTo applyTo, string provider): this(applyTo)
    {
        this.Provider = provider;
    }

    public MyRequestFilterAttribute(string provider): this(ApplyTo.All)
    {
        this.Provider = provider;
    }

    public override void Execute(IHttpRequest req, IHttpResponse res, object requestDto)
    {}
}
这是服务班

[MyRequestFilter(ApplyTo.All)]
public class TodoService : RestServiceBase<Todo>
{
    public TodoRepository Repository { get; set; }                  
    public override object OnGet(Todo request)
    {
        if (request.Id == default(long))
            return Repository.GetAll();

        return Repository.GetById(request.Id);
    }
    public override object OnPost(Todo todo)
    {
        return Repository.Store(todo);
    }
    public override object OnPut(Todo todo)
    {
        return Repository.Store(todo);
    }
         [MyRequestFilter("Admin")]
    public override object OnDelete(Todo request)
    {
        Repository.DeleteById(request.Id);
        return null;
    }
    public object GetDetailsofALL()
    {
        return null;
    }
}

是否可以从方法级别设置权限/筛选器属性?如果是,如何实现此功能?

否无法将其添加到方法中。您可以将其添加到服务类或请求DTO中,并使用ApplyTo方法过滤器告诉servicestack它应该应用于哪些方法,例如:

[MyRequestFilter(ApplyTo.All)]
[MyRequestFilter(ApplyTo.Delete, "Admin")]
public class TodoService : RestServiceBase<Todo> { ... }
[MyRequestFilter(ApplyTo.All)]
[MyRequestFilter(ApplyTo.Delete,“Admin”)]
公共类TodoService:RestServiceBase{…}

您还可以参考和属性的实现,以获取支持此功能的示例

谢谢你,伙计。。我以前看过这些链接。。但我只是想知道是否有可能从方法层面上做一些事情。
[MyRequestFilter("Admin")]
public override object OnDelete(Todo request){}
[MyRequestFilter(ApplyTo.All)]
[MyRequestFilter(ApplyTo.Delete, "Admin")]
public class TodoService : RestServiceBase<Todo> { ... }