У меня сейчас есть ссылка для входа в мое приложение, которое выглядит примерно так:
<a href="/login?ReturnUrl=" + <%= Request.RawUrl %>>Login</a>
Я хочу обработать команду POST на странице входа в действие контроллера ниже:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(string returnUrl)
{
// Authenticate user
return Redirect(returnUrl);
}
Проблема здесь в том, что если RawUrl имеет что-то с несколькими параметрами url, такими как «somepage? Param1 = 1 & param2 = 2 & param3 = 3», то returnUrl, который передается в действие Login, усекается после первого амперсанда: «somepage? Param1 = 1" .
Я пробовал UrlEncoding в RawUrl, но, похоже, это что-то меняет. Похоже, что инфраструктура ASP.NET MVC здесь - это UrlDecoding для параметров url перед их сопоставлением с параметрами действия контроллера, что в итоге приводит к удалению дополнительных параметров url, которые я хочу видеть в моем параметре returnUrl.
Есть ли способ обойти это? Я знаю, что могу просто использовать Request.Path и разобрать нужные мне значения, но я подумал, что сначала посмотрю, есть ли более чистый подход.