Я пытаюсь создать настраиваемый атрибут для службы ServiceStack, с помощью которой я могу контролировать каждый метод в классе службы.Пользовательские атрибуты методов 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;
}
}
Я смог получить контроль над методы, когда я устанавливаю атрибут на уровне класса.
т.е.[MyRequestFilter(ApplyTo.All)]
public class TodoService : RestServiceBase<Todo>{}
Что я требую, чтобы поместить атрибут на уровне метода, а также и сделать некоторые проверки подлинности, так что только администратор имеет право осуществлять этот метод обслуживания. Но когда я помещаю этот атрибут в метод Delete, он не работает, и атрибут настраиваемого фильтра не попадает. Выполняется только вызов атрибута класса.
[MyRequestFilter("Admin")]
public override object OnDelete(Todo request){}
Возможно ли установить атрибут разрешения/фильтра на уровне метода? Если да, то как я могу это реализовать?
Спасибо mate .. Я прошел через ссылки раньше .. но просто хотел узнать, можно ли вообще что-то делать с уровня метода. – Manek