Получение метода 405, недопустимого в GET - PullRequest
0 голосов
/ 22 сентября 2011

Нажав на следующую ссылку в моем веб-приложении, вы получите 405:

<a href="/unsubscribe/confirm?emailUid=<%= ViewData["emailUid"] %>&hash=<%= ViewData["hash"] %>" class="button">Yes, unsubscribe me.</a>

Вот подтверждающее действие, вызываемое из контроллера отмены подписки:

    [HttpGet]
    public ActionResult Confirm( string emailUid, string hash)
    {
        using ( UnsubscribeClient client = new UnsubscribeClient() )
        {
            UnsubscribeResponse response = client.Unsubscribe( emailUid, hash );
            return View( response );
        }

    }

Простые вещи. Он работает, когда я его F5, но когда я размещаю его в IIS (7.5 и 6), я получаю ошибку.

Я довольно потерян с этим. Я обыскивал сеть, но не могу найти причину того, почему это происходит.

Ответы [ 5 ]

3 голосов
/ 22 сентября 2011

<%= Html.ActionLink(
    "Yes, unsubscribe me.",
    "Confirm", 
    "Unsubscribe", 
    new { emailUid = ViewData["emailUid"], hash = ViewData["hash"] }, 
    new { @class = "button" }
) %>

Также ViewData ?! Пожалуйста, удалите это также в пользу строго типизированных представлений и моделей представлений. Каждый раз, когда я вижу, что кто-то использует ViewData, я чувствую себя обязанным сказать это.

0 голосов
/ 22 сентября 2011

Ну, я нашел свою проблему.Оказывается, проблема с моей конфигурацией IIS.В IIS 6 я не разрешал выполнение сценариев в каталоге, поэтому мой .svc никогда не запускался для моего хоста службы.Как только я изменил эту настройку, я больше не получил ошибку 405 ...

Большое спасибо за другие ответы.Я обязательно буду использовать помощник HTML.

0 голосов
/ 22 сентября 2011

Если в ваших emailUid или hash есть период, его необходимо закодировать. Это не единственный проблемный персонаж, но я подозреваю, что это так. Используйте HttpUtility.UrlEncode для этих значений перед объединением их в URL.

Почему 405? Вероятно, потому что в IIS6 нет сопоставлений сценариев для предполагаемого «расширения файла». Это вовсе не расширение файла, но без кодирования точки в URL-адресе он не знает ничего лучше.

0 голосов
/ 22 сентября 2011

Убедитесь, что указанный URL-адрес действителен, и любой недопустимый символ экранирован правильно, например, убедитесь, что & экранирован как &amp;

0 голосов
/ 22 сентября 2011

Каков реальный рендеринг HTML href в привязке?Действительный сгенерированный URI?

Меняет ли он на эту работу:

 <%= Html.ActionLink("Yes, unsubscribe me.", "Confirm", "Unsubscribe", new { emailUid= ViewData["emailUid"], hash = ViewData["hash"]})%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...