Я столкнулся с каким-то нечетным поведением аутентификации в моем приложении 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, и он работает так, как ожидалось.
Я не использую фильтр или какой-либо пользовательский атрибут. Что может привести к тому, что это одно действие будет вести себя таким необычным образом?
Если вы поставили точку останова в методе 'VerifyCode', это попало? – haim770
@haim Да. Мне удалось проследить проблему до макета в представлении. Установите значение null и действие контроллера. Я думаю, что у ответчика есть правильный ответ –