2013-03-29 2 views
0

Использование asp.net mvc4. Я не могу нажать ~/Account/LogOff из своего приложения. Маршрут по умолчанию должен поймать его и перенаправить на соответствующий контроллер. in routeeconfig.csasp.net mvc4 не найден

routes.MapRoute(
      name: "Home", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Должно ли не улавливать URL?

код для создания ссылки

@Html.ActionLink("Signout", "LogOff", "Account" , new{controller = "Account" 
, action = "LogOff"}, new{ target = "_self"}) 

По какой-то причине, что сводит меня с ума, я не могу ударить

// 
    // POST: /Account/LogOff 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOff() 
    { 
     var fam = FederatedAuthentication.WSFederationAuthenticationModule; 
     fam.SignOut(false); 
     SignOutRequestMessage signOutRequest = new SignOutRequestMessage(new Uri(fam.Issuer), fam.Realm); 
     return new RedirectResult(signOutRequest.WriteQueryString()); 

    } 

Я попытался добавить маршрут до и после «Home "maproute. Ни один из них не работает. Что в мире мне не хватает? Я написал десятки приложений asp.net mvc и не имел этой проблемы. Это дует мне в голову. Пожалуйста помоги.

Приветствия, ~ ск

+0

выглядит отлично , Я предполагаю, что маршрут и ссылка совпадают правильно, но метод нет. не могу указать на какую-либо явную * причину * для этого. Я бы начал с удаления antiforgerytoken. никто не пострадает, если пользователь подделывает выход из системы –

ответ

0

О, я делал получить по ссылке клик. Метод предназначен для сообщения. Я завернул ссылку в теге формы, и по ссылке нажмите кнопку Отправить форму как обычно. Это устранило проблему и ударило мой метод контроллера.

+0

Почему бы просто не удалить атрибут [HttpPost] из действия? – edgi

+0

Это правильный метод, обертывающий форму вокруг ссылки и публикации. Я не уверен, почему это заставляет проголосовать за исключением того, что человек не понимает, почему MVC 4 поставляется с LogOff, требующим публикации. Эта причина связана с AntiForgeryToken, которому необходимо вернуться на сервер для предотвращения вредоносных сайтов и т. Д., Отключение пользователей путем прямой привязки к действию LogOff. –

0

Вам необходимо удалить атрибут [HttpPost] из действия LogOff(). @Html.ActionLink() создаст регулярную ссылку (<a>), поэтому нажатие на нее выдаст запрос GET.

+0

Я не могу проголосовать, но это неверно. Сообщение обязательное для AntiForgeryToken –

1

Причина в том, что у вас есть [HttpPost]. В основном это означает, что он запрашивает запрос, поступающий с кнопки отправки из форм, но так как вы не используете кнопку отправки ни одной формы, действие «Выход из системы» будет пропущено.

Вы можете решить эту проблему по 2 причинам:

1.) Изменение [HttpPost] к [HttpGet]

2.) Просто направить вашу ссылку на ваши действия:

@Html.ActionLink("Signout", "LogOff", "Account")

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