фона
В HomeController.cs
у меня есть:Автоматический URL Параметр Encoding В противном случае
[HttpGet]
public GetPerson(string name)
{
return View(new PersonModel { ... });
}
В Global.asax.cs
у меня есть:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Word", "person/{name}",
new { controller = "Home", action = "GetPerson" });
routes.MapRoute(
"Default", "{controller}/{action}",
new { controller = "Home", action = "Index" });
}
В SomePage.cshtml
у меня есть, по сути, это:
@{ var name = "Winston S. Churchill"; }
<a href="@Url.Action("GetPerson", "Home", new { name })">@name</a>
Проблема
Если я нажимаю ссылку для Winston S. Churchill, я направлен на URL http://localhost/person/Winston%20S.%20Churchill
, что дает стандартную страницу 404:
Ошибка HTTP 404.0 - Not Found
Ресурс, который вы ищете, удален, изменил его имя или временно недоступен.
Это происходит только если переменная name
содержит .
(период). Весь мой код работает отлично, когда имя, например, Winston Churchill
.
Как сделать ASP.NET MVC 3-процентным кодированием .
(период) в URL-адресе?
Или, как я могу сделать работу по маршрутизации без .
(период) в процентах?
Неприемлемо Обход (если представлены без обоснования)
Если изменить маршрут к следующему, все работает.
routes.MapRoute(
"Word", "person",
new { controller = "Home", action = "GetPerson" });
Однако URL становится http://localhost/person?name=Winston%20S.%20Churchill
, который не то, что я хочу. Я хочу, чтобы name
в части пути URL, а не в запросе.
Существуют ли какие-либо проблемы безопасности с этим, что может быть неожиданным? –
Кроме того, хотя это работает для «Уинстона С. Черчилля» (я просто попробовал), он терпит неудачу для «Альберта Гора младшего» (период примечания в конце). –
Нет проблем с безопасностью, но это означает, что ASP.NET будет пытаться обрабатывать все запросы, поэтому файлы, которые на самом деле являются статическими (изображения, CSS и т. Д.), Будут занимать чуть больше времени для загрузки. На практике вы вряд ли заметите разницу. Чтобы исправить проблему с завершающим периодом, попробуйте добавить ' ' to ''. –
James