Проблема ограничения анонимного доступа к сайту ASP.Net MVC - PullRequest
3 голосов
/ 14 февраля 2009

Всякий раз, когда я ограничиваю анонимный доступ на своем сайте MVC, я получаю ошибку 404:

Ошибка сервера в «/» приложении. Этот ресурс не может быть найден. Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / Account / Login

Я только что играл с MVC (RC1 Refresh ) в первый раз, и после того, как мой бывший член провайдера заработал, я захотел заблокировать сайт, чтобы предотвратить анонимный доступ. Я попробовал традиционный способ, используя web.config с:

<configuration>
    <system.web> 
        <authorization> 
            <deny users="?"/> 
        </authorization> 
    </system.web> 
</configuration>

, но получил вышеуказанную ошибку, хотя я явно разрешил анонимный доступ к странице входа в систему.

Я также попробовал метод, упомянутый в блоге Скотта Гу , и защитил страницу About, добавив атрибут [Authorize] в HomeController

[Authorize]
public ActionResult About()
{
    return View();
}

, но я получил ту же ошибку при попытке доступа к этой странице.

Я даже пробовал чистую установку на отдельном компьютере.

Как включить авторизацию в ASP.Net MVC RC1 Refresh?

Ответы [ 2 ]

7 голосов
/ 14 февраля 2009

Web.Config по умолчанию содержит ошибку. Имеет:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login"/>
</authentication>

Это должно быть:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn"/>
</authentication>

(Извините, что спрашиваю и отвечаю на свой вопрос, но мне потребовались годы, чтобы определить это и не смог найти никаких подсказок через Google или SO. Если это было опубликовано до того, как вы можете закрыть его).

0 голосов
/ 30 марта 2016

Я бы не советовал использовать аутентификацию по формам.

Вместо этого используйте промежуточный программный конвейер.

public void ConfigureAuth(IAppBuilder app)
{
    // Enable the application to use a cookie to store information for the signed in user
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });
}

Конечно, вам нужно удалить модуль форм аутентификации из веб-конфигурации и использовать ключевое слово [Authorize]

...