Я передаю returnUrl = Request.Url
в действие контроллера, проблема в том, что когда я проверяю его с помощью следующего кода перед перенаправлением, он не работает из-за вызова IsLocalUrl()
. Зачем?returnUrl и IsLocalUrl()
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
Thanks.
Это не так, как в случае с возвратом false? Может быть, это связано с этим вопросом SO: http://stackoverflow.com/questions/8633782/why-does-url-islocalurl-return-false-if-the-url-contains-a-fragment? – Tallmaris
Да, и URL-адрес абсолютно прав: 'http: // localhost: 55058/Orders/Details/102064'. Что именно означает «местный» в этом контексте? – abenci
Глядя на реализацию 'IsReturnUrl' (https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.WebPages/RequestExtensions.cs), он, кажется, рассматривает локальные только те вещи, которые начинаются с'/'и '~ /' (но не '//' или '/ \'. Вероятно, вы должны урезать протокол: доменная часть url ... – Tallmaris