я в настоящее время есть ссылка для входа на моем приложение, которое выглядит примерно так:ReturnUrl в ASP.NET MVC
<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, которая будет послана в Регистрационное действие усекается после первого амперсанд: "somepage? p aram1 = 1" .
Я пробовал UrlEncoding RawUrl, но это, похоже, имеет значение. Кажется, что структура ASP.NET MVC здесь UrlDecoding params url, прежде чем сопоставлять их с параметрами действия контроллера, что заканчивает отмену дополнительных параметров url, которые я хочу увидеть в моем параметре returnUrl.
Есть ли способ обойти это? Я знаю, что могу просто использовать Request.Path и проанализировать нужные мне значения, но я подумал, что сначала посмотрю, был ли более чистый подход.
Это хорошо; PathAndQuery не включает домен, поэтому вы не уязвимы для злоумышленника, используя ваш сервер для перенаправления на свой сайт. – Will
Я бы не сказал, что ты не уязвим. Люди могут изменять данные формы с помощью Fiddler и т. П. Вы все еще должны дезинфицировать URI на сервере. С другой стороны, хорошо не заполнять форму плохими данными. :) –
Выглядит хорошо. Остерегайтесь, хотя 'ViewContext.HttpContext.Request.Url' может вернуть значение null, что означает, что у вас может быть« NullReferenceException ». –