2016-07-11 3 views
0

Я столкнулся с каким-то нечетным поведением аутентификации в моем приложении MVC. Все контроллеры наследуются от BaseController, который украшен атрибутом [Authorize]. Затем, на странице входа, я украшаю действия с помощью [AllowAnoymous].один контроллер не отвечает на AllowAnonymous

Так, например, это свободно доступно независимо от того, зарегистрирован пользователь или нет.

[AllowAnonymous] 
public ActionResult ForgotPasswordConfirmation() 
{ 
    return View(); 
} 

Если удалить [AllowAnonymous] атрибут из этого действия контроллера и попытаться перейти к нему, то я присылают обратно на страницу входа в систему, и я вижу, что URL автоматически имеет параметр ReturnUrl appened к Строка запроса.

Однако, у меня есть еще одно действие контроллера с тем же атрибутом:

[AllowAnonymous] 
public async Task<ActionResult> VerifyCode(string provider, string returnUrl, bool rememberMe) 
{ 
    return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe }); 
} 

Мое приложение абсолютно не сделает этот взгляд для пользователей, которые не вошли в систему, даже если он украшен [AllowAnonymous]. Почему я не могу понять, почему. Тем не менее, я заметил, что когда вы пытаетесь перейти к нему, никакой ReturnUrl не генерируется.

Я предполагаю, что этого следовало ожидать, поскольку он должен позволять анонимным пользователям. Но это не так. Я попытался создать действие/представление контроллера скелета с помощью и без AllowAnonymous, и он работает так, как ожидалось.

Я не использую фильтр или какой-либо пользовательский атрибут. Что может привести к тому, что это одно действие будет вести себя таким необычным образом?

+0

Если вы поставили точку останова в методе 'VerifyCode', это попало? – haim770

+0

@haim Да. Мне удалось проследить проблему до макета в представлении. Установите значение null и действие контроллера. Я думаю, что у ответчика есть правильный ответ –

ответ

2

Проверьте, есть ли у вас вызов дочернего действия внутри вашего бритвы VerifyCode.cshtml, что недопустимо для анонимных пользователей.

Смежные вопросы