Почему делает запаздывание %20 (допустимые данные в этом случае) уничтожают asp.net mvc маршрутизация

Примите следующие меры контроллера

    public ActionResult NextBySURNAME(int id, string data)
    {
        //code to process the data and edit the id accoringly not written yet
        return RedirectToAction("Edit", new { id = id });
    }

если я называю его с/Mycontroller/NextBySURNAME/12/Smith%20Simon

затем это хорошо работает (в этой записи редактирования случая 12), но

/Mycontroller/NextBySURNAME/12/Smith%20

дает мне 404

Теперь я знаю, что в некоторых случаях в моей проблемной области, запаздывающей, пробел является значительным, таким образом, я не просто хочу обрезать его. Итак, почему это повреждает мой маршрут?

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}/{data}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional, data=UrlParameter.Optional } // Parameter defaults
        );
17
задан SwDevMan81 8 July 2010 в 17:33
поделиться

2 ответа

Итак, я провел некоторую отладку маршрутов и обнаружил, что маршруты, заканчивающиеся пробелом, даже не оцениваются моим приложением MVC. Следовательно, IIS должен плохо обрабатывать эти запросы.

Я добавил правило перезаписи в IIS 7.5, чтобы сопоставить конечные пробелы и переписать их с тем же URL-адресом без пробелов. Я не удовлетворен этим решением, но не смог найти объяснения, почему IIS неправильно обрабатывает URL-адреса с конечными пробелами.

8
ответ дан 30 November 2019 в 14:38
поделиться

Я думаю, что способ обработки экранированных символов можно изменить в .NEt 4.0, но я сам не пробовал. См. http://msdn.microsoft.com/en-us/library/system.uri.aspx.

Ответ Andrews на URL-encoded slash in URL

Также Как создать экземпляр Uri, разобранный с помощью GenericUriParserOptions.DontCompressPath

Это все только предположения, но, возможно, это поможет.

1
ответ дан 30 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: