Как заставить работать asp.net удостоверение личности? - PullRequest
3 голосов
/ 11 апреля 2019

Я решил использовать идентификацию asp.net на моем сайте впервые. Я пытаюсь создать простую ссылку выхода из системы с моей точки зрения. Когда я нажимаю на ссылку, я получаю сообщение об ошибке «Ошибка сервера в приложении». Запрашиваемый URL: / Учетная запись / Выход из системы. На данный момент мне кажется, что код правильный, но, очевидно, что-то не так. Любая помощь будет оценена.

Контроллер:

// POST: /Account/Logout
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Logout()
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie);
    Session.Abandon();
    return RedirectToAction("Login", "Account");
}

Индекс:

<div id="sidebar-nav" class="sidebar">
    <div class="sidebar-scroll">
        <nav>
            <ul class="nav">
                <li><a href="@Url.Action("Index", "Home")" class="active"><i class="lnr lnr-home"></i> <span>Dashboard</span></a></li>
                <li>
                    <a href="#subPages" data-toggle="collapse" class="collapsed"><i class="lnr lnr-file-empty"></i> <span>Reports</span> <i class="icon-submenu lnr lnr-chevron-left"></i></a>
                    <div id="subPages" class="collapse ">
                        <ul class="nav">
                            <li><a href="@Url.Action("Index", "Home")" class="">Fulfillment</a></li>
                            <li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
                            <li><a href="@Url.Action("Index", "Home")" class="">Report</a></li>
                        </ul>
                    </div>
                </li>
                <li><a href="@Url.Action("Logout", "Account")" class=""><i class="lnr lnr-dice"></i> <span>Logout</span></a></li>
            </ul>
        </nav>
    </div>
</div>

Если щелкнуть ссылку выхода из системы в представлении индекса, возвращается ошибка, описанная выше.

Ожидаемые результаты - ссылка для вызова метода Logout в контроллере и перенаправления на страницу входа в систему.

1 Ответ

3 голосов
/ 11 апреля 2019

Поскольку вы переходите по ссылке, нажимая на нее, вам следует присвоить конечной точке значение [HttpGet], а не [HttpPost], поскольку это тип запроса, который вы делаете.

Вы такжеследует добавить маркер защиты от подделки на свой сайт, поскольку вы проверяете его, назначив метод с помощью [ValidateAntiForgeryToken] ( Применимо к запросам POST )

Если вы не хотитечтобы сделать это (или когда вы делаете запросы GET), удалите аннотацию , в противном случае добавьте в свою форму следующее, чтобы сгенерировать:

@Html.AntiForgeryToken()

Это в свою очередь сделает вводпохож на:

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">

Подробнее о токенах AntiForgery здесь .

...