서비스 클래스의 각 메서드를 제어 할 수있는 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>{}
뿐만 아니라 메소드 수준에서 속성을 배치하고 단지 관리자가 서비스의이 방법을 수행 할 수있는 권한을 갖도록 일부 인증을하는 것입니다. 그러나이 특성을 삭제 메서드에 배치하면 작동하지 않고 사용자 지정 필터 특성이 손상되지 않습니다. 클래스 수준 특성 호출 만 작동합니다.
[MyRequestFilter("Admin")]
public override object OnDelete(Todo request){}
메소드 수준에서 권한/필터 속성을 설정할 수 있습니까? 그렇다면 어떻게 구현할 수 있습니까?
고마워. 나는 전에 링크를 통해 갔었지만 방법 수준에서 어떤 일을 할 수 있는지 전혀 알고 싶지 않았습니다. – Manek