Мое веб-приложение MVC создает ссылку активации, которая может содержать любой символ (%, +, / и т. Д.). Я URL кодирую строку и генерирую ссылку:
new UrlHelper(HttpContext.Current.Request.RequestContext)
.RouteUrl("AccountActivation",
new { id = HttpContext.Current.Server.UrlEncode(activationString) };
затем добавьте домен, и он будет выглядеть так:
http://localhost/AccountActivation/asdlkj223%25asd%2Basw3fgasdme
Затем URL передается пользователю.
Маршрут в этом случае:
routes.MapRoute(
"ActivateAccount",
"AccountActivation/{id}",
new { controller = "Account", action = "Activate", id = ""});
Мне кажется, что все в порядке, но сервер разработки ASP.NET и IIS выдают мне ошибку HTTP 400 - неверный запрос. Это означает, что есть проблема с URL, который я не вижу.
Когда избавиться от {id} в описании маршрута (я также попытался {* id} безуспешно):
routes.MapRoute(
"ActivateAccount",
"AccountActivation",
new { controller = "Account", action = "Activate"});
URL выглядят так:
http://AccountActivation?id=asdlkj223%25asd%2Basw3fgasdme
и они прекрасно работают ...
Я думаю, что эти два подхода делают одно и то же. В чем разница между ними? Это двигатель MVC, который выполняет что-то большее для меня, или я что-то пропустил с кодировкой URL.