atributo personalizado Autorizar não trabalhando em requisições Ajax expirados
-
10-07-2019 - |
Pergunta
Eu tenho um atributo autorizar personalizado em meus controladores e não está sendo chamado em requisições Ajax expirados. Eu estou usando autenticação de formulários, e chamar métodos do controlador via $ .ajax (jQuery). O pedido ajax retorna a minha página de login e eu não parecem ser capazes de interceptar isso.
Obrigado.
UPDATE: Eu descobri o porquê: Eu comentei na seção autorização no meu web.config como segue:
<authentication mode="Forms">
<forms loginUrl="/Login" timeout="1" slidingExpiration="false"/>
</authentication>
<!--<authorization>
<deny users="?"/>
</authorization>-->
Agora o meu filtro de autorização está sendo chamado, mesmo após a expiração. Acontece que as regras de autorização Web.config ter precedência sobre filtros Autorizar.
Solução
Não devolva 401 não autorizado. intercepta que e redirecionamentos ASP.NET para a página de login definido no web.config. Para AJAX, em vez retornar algo mais, como 403.
Outras dicas
Há também um bom blog sobre isso aqui:
Use context.HttpContext.Request.IsAjaxRequest()
para detectar se o pedido é um pedido Ajax ou não.
Confira mais aqui: