ASP.NET Вход в систему MVC ReturnUrl всегда ПУСТОЙ УКАЗАТЕЛЬ?

Dim oldFileName = "C:\Test\16 Move File out of folder\GetICN.txt"
Dim newFileName = "C:\Test\16 Move File out of folder\GetICN2.txt"

Dim allText = System.IO.File.ReadAllText(oldFileName)
Dim matchs = System.Text.RegularExpressions.Regex.Matches(allText, "ICN-\w.*-\d+-\w+-\d+-\d\d")

Dim lines = matchs.Cast(Of System.Text.RegularExpressions.Match).Select(Function(m) m.Value)
System.IO.File.WriteAllLines(newFileName, lines)
56
задан aherrick 6 May 2009 в 03:24
поделиться

4 ответа

Возможно, вы не включили параметр ReturnURL в атрибут действия формы входа в систему, тем самым отправив сообщение в URL без этого параметра?

24
ответ дан 26 November 2019 в 17:07
поделиться

Попробуйте выполнить следующее:

        public static MvcForm BeginForm(this HtmlHelper htmlHelper, string id)
    {
        string formAction = htmlHelper.ViewContext.HttpContext.Request.RawUrl;

        TagBuilder tagBuilder = new TagBuilder("form");

        tagBuilder.MergeAttribute("id", id);
        tagBuilder.MergeAttribute("action", formAction);
        tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post), true);

        HttpResponseBase httpResponse = htmlHelper.ViewContext.HttpContext.Response;
        httpResponse.Write(tagBuilder.ToString(TagRenderMode.StartTag));

        return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
    }

Сначала убедитесь, что вы установили URL-адрес входа в систему в файле web.config, а затем убедитесь, что ваш вход Форма не содержит ничего похожего на действие, например:

Представление:

Если вы укажете действие, вы всегда получите нулевой для возвращаемого URL:

Контроллер:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SignIn(string userName, string password, bool? rememberMe, string returnUrl)
{
}
1
ответ дан 26 November 2019 в 17:07
поделиться

Это обычно происходит, когда вы используете одну общую форму входа, но явно указываете Controller и ActionMethod (что вызывает публикацию формы, но теряет строку запроса)

Чтобы прояснить, вот как должен выглядеть ваш код в BeginForm:

Html.BeginForm("LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] })

EDIT : Это сделано намеренно, как упоминает RickAnd в комментариях ниже. Однако он не позволяет шаблону пользовательского интерфейса находиться в глубине сайта, нажимать «Вход в систему», а затем возвращаться на страницу, на которой вы были ранее, если это позволяет анонимным пользователям. Это часто запрашиваемый шаблон. Подход Дэвида Аллена к LogOff также хорошо подойдет для чистого перенаправления в LogOn.

120
ответ дан 26 November 2019 в 17:07
поделиться

Я могу придумать два способа работы со сценариями входа и выхода. Дэйв Бир описал один способ выше. Есть еще один подход, который работает во многих ситуациях. Я использовал его при написании учебника NerdDinner. Учебное пособие предоставляет нам функцию выхода из системы, которая выводит вас из системы и возвращает вас домой. Я этого не хотел. Я хотел вернуться на страницу, на которой был до выхода из системы. Поэтому я изменил действие выхода из системы контроллера учетной записи, чтобы оно выглядело следующим образом

   public ActionResult LogOff()
    {
        FormsService.SignOut();
        return Redirect(Request.UrlReferrer.ToString());
    }

. Вы можете стать более интересным и передать returnUrl и протестировать его, если вы хотите изменить это поведение. Но мне это не нужно. Таким образом достигается желаемый результат. Вход в систему может работать аналогично. Возможно, есть способы использовать инфраструктуру MVC, чтобы сделать это за меня, но пока я их не изучу, это ОЧЕНЬ просто и работает надежно.

3
ответ дан 26 November 2019 в 17:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: