Примите следующие меры контроллера
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
);
Итак, я провел некоторую отладку маршрутов и обнаружил, что маршруты, заканчивающиеся пробелом, даже не оцениваются моим приложением MVC. Следовательно, IIS должен плохо обрабатывать эти запросы.
Я добавил правило перезаписи в IIS 7.5, чтобы сопоставить конечные пробелы и переписать их с тем же URL-адресом без пробелов. Я не удовлетворен этим решением, но не смог найти объяснения, почему IIS неправильно обрабатывает URL-адреса с конечными пробелами.
Я думаю, что способ обработки экранированных символов можно изменить в .NEt 4.0, но я сам не пробовал. См. http://msdn.microsoft.com/en-us/library/system.uri.aspx.
Ответ Andrews на URL-encoded slash in URL
Также Как создать экземпляр Uri, разобранный с помощью GenericUriParserOptions.DontCompressPath
Это все только предположения, но, возможно, это поможет.