2013-07-02 5 views
7

У меня есть MVC4 веб-приложение, с помощью следующего контроллераПочему AllowAnonymous не работает во время развертывания на Azure-сайтах?

[Authorize] 
public class AccountController : BaseController 
{ 
    [AllowAnonymous] 
    public ActionResult SignInRegister(LoginModel loginModel, string returnUrl) 
    { 
    //some implementation 
    } 
    //other secured actions 
} 

Это работает, как ожидалось при работе на местном уровне, но как только я раскрываю его на сайт бесплатно Azure я получаю код 401 ошибки с сообщением: You do not have permission to view this directory or page.

Извлечение атрибута [Authorize] и его повторное развертывание, как и следовало ожидать, добавление его снова и повторное развертывание возвращает проблему.

Я даже попробовал полностью квалифицированные имена классов: System.Web.Mvc.Authorize и System.Web.Mvc.AllowAnonymous с теми же результатами.

Приложение использует .NET 4.5, а Azure Website также настроен на использование 4.5.

UPDATE: BaseController имеет действие, которое возвращает заголовок, как частичный вид, который не был украшен [AllowAnonymous]. Локально это привело к тому, что страница отображалась без заголовка, но на сайтах Azure ответ был отключен и возвращался только с сообщением об ошибке, упомянутым выше. Я не понял, что заголовок пропал, пока я нарочно не посмотрел на него.

Теперь вопрос задает вопрос: почему сайты Azure перекрывают ответ?

+2

Вы должны опубликовать свое обновление в качестве ответа. – Kyle

ответ

4

BaseController имеет действие, которое возвращает заголовок как частичный вид, который не был украшен [AllowAnonymous]. Локально это привело к тому, что страница отображалась без заголовка, но на сайтах Azure ответ был отключен и возвращался только с сообщением об ошибке, упомянутым выше. Я не понял, что заголовок пропал, пока я нарочно не посмотрел на него.

Теперь вопрос задает вопрос: почему сайты Azure перекрывают ответ?

+0

Это помогло мне. Если вы планируете включать частичные представления для макетов и т. Д., Они должны быть отмечены как [AllowAnonymous]. – Ant

2

У меня была одна и та же проблема, и, как говорит Джонас, вы должны следить за действиями, которые возвращают частичные представления и имеют атрибут [Авторизовать].

Что нужно сделать, так это удалить атрибут [Авторизовать], а затем, если вашему действию необходимо, чтобы пользователь был аутентифицирован для правильной визуализации, попросите свой код обработать несанкционированный случай.

Пример: если ваша страница отображает имя пользователя, которое в настоящее время вошло в систему, через Partial. Пусть ваше действие отображает пустую строку или что-то еще, если текущий пользователь не доступен.

1

Проверьте web.config, если у вас есть

<authorization> 
    <deny users="?" /> 
</authorization> 

его переопределение [AllowAnonymous]

Добавить в web.config раздел:

<location path="YourController/AnonymousMethod"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

разрешить анонимный доступ к AnonymousMethod