É possível substituir um atributo que tem sido aplicado a nível de controlador em um método específico?

StackOverflow https://stackoverflow.com/questions/1213036

Pergunta

Se eu tiver aplicado um atributo autorização a nível controlador, é possível substituir esse em um dos métodos em que o controlador?

Graças

James

Foi útil?

Solução

Isso depende de que tipo de "override" você quer. Você não pode remover o atributo que está na classe, mas você pode adicionar o atributo para o método novamente, a fim de tornar as coisas mais restritiva.

Atualização em resposta aos comentários. Em primeiro lugar, fazer o seu próprio AuthorizeAttribute é um pouco perigoso. AuthorizeAttribute contém código que interage com o cache de atributos, a fim de garantir que o cache não pode servir de conteúdo protegido para um usuário não-autorizado. No mínimo, você deve subtipo do AuthorizeAttribute existente em vez de criar algo totalmente novo. Geralmente, no entanto, é uma idéia melhor para usar o AuthorizeAttribute existente e especializar a sua autorização, criando um novo / encontrar um provedor de associação ASP.NET existente.

Eu não acho que seria um bom projeto para ter um filtro em uma ação que "substitui" um filtro em um controlador. No entanto, você pode alterar o design do filtro no controlador para não exigir a autorização em uma ação de um determinado nome. Você poderia, por exemplo, substituir o método AuthorizeAttribute.AuthorizeCore para teste para um nome de ação da mesma forma os testes de métodos existentes para o nome de usuário e os papéis. Tome nota muito cuidado com os comentários em este método em relação à segurança fio.

Outras dicas

Eu não tenho certeza se este é exatamente a mesma pergunta, mas pode ajudar ...

Como fazer ActionFilter em método de ação têm precedência sobre mesmo ActionFilter no controlador

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top