ASP.NET MVC SSL POST Ошибка - PullRequest
       4

ASP.NET MVC SSL POST Ошибка

0 голосов
/ 22 марта 2010

У меня есть страница входа в приложение MVC (1.0), которое я защищаю с помощью SSL, у меня есть атрибут, который проверяет запрос на страницу и перенаправляет его на https uri, когда он запрашивается с помощью http.Это все работает, однако, когда я публикую содержание формы, я получаю следующую ошибку:

Словарь параметров содержит пустую запись для параметра 'RememberMe' не обнуляемого типа 'System.Boolean' для метода'System.Web.Mvc.ActionResult LogOn (System.String, System.String, Boolean, System.String)' в 'DAC.US.Web.Portal.Controllers.AccountController'.Чтобы сделать параметр необязательным, его тип должен быть либо ссылочным типом, либо типом Nullable.Имя параметра: параметры

вот код контроллера ...

    //
    // GET: /Account/LogOn
    [RequiresSSL]
    public ActionResult LogOn(string ReturnUrl)
    {
        if (TempData["Message"] != null)
            ViewData["Message"] = TempData["Message"];

        TempData["Message"] = null;

        ViewData["ReturnUrl"] = ReturnUrl ?? "/Home"; 

        return View();
    }

Опять же, атрибут RequireSSL работает, но POST из этого SSL URI - нет.Что не работает?

Вот метод действия (POST), я прошу прощения за то, что не опубликовал.Это все работает файл, когда не работает как SSL, но когда я перехожу на работу под SSL, POST больше не работают.

    //
    // POST: /Account/LogOn
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
    {
        Logger.InfoFormat("LogOn : ({0}, PASSWORD, {1}, {2}).", userName, rememberMe, returnUrl);
        if (!ValidateLogOn(userName, password))
        {
            return View();
        }

        _FormsAuthentication.SignIn(userName, rememberMe);

        if (!String.IsNullOrEmpty(returnUrl))
        {
            return Redirect(this.Request.Url.AbsoluteUri.Replace(this.Request.RawUrl, returnUrl).Replace("https://", "http://"));
        }
        else
        {
            return Redirect(this.Request.Url.AbsoluteUri.Replace(this.Request.RawUrl, "/Home").Replace("https://", "http://"));
            //return RedirectToAction("Index", "Home");
        }
    }

Форма HTML

                        <% using (Html.BeginLogOnForm()){ %>
                            <div class="logon-row logon-sso-row">
                                <div class="logon-links-row"><a href="<%=Url.Action("SingleSignOn", "Account", new{ReturnUrl=ViewData["ReturnUrl"]}) %>">Single Sign On</a></div>
                            </div>
                            <div class="logon-row">
                                <span class="block-span logon-label-cell">User Name:</span>
                                <span class="block-span"><%= Html.TextBox("username", null, new { style = "width:150px" })%></span>
                            </div>
                            <div class="logon-row">
                                <span class="block-span logon-label-cell">Password:</span>
                                <span class="block-span"><%= Html.Password("password", null, new { style="width:150px" })%></span>
                            </div>
                            <div class="logon-row">
                                <span class="block-span logon-label-cell">Remember Me?:</span>
                                <span class="block-span"><%= Html.CheckBox("rememberMe")%></span>
                            </div>
                            <div class="logon-row logon-bottons-row">
                                <input type="submit" value="Log On" class="mainshipButton mainshipPageButton" />
                            </div>
                            <div class="logon-row">
                                <div class="logon-links-row"><a href="<%=Url.Action("Request", "Account") %>">Request Account</a></div>
                                <div class="logon-links-row"><a href="<%=Url.Action("Forgot", "Account") %>">Forgot ID/Password</a></div>
                            </div>
                        <% } %>

Ответы [ 2 ]

0 голосов
/ 22 марта 2010

Ну, после поисков в течение нескольких часов, я закрыл свой браузер (IE) .. затем попробовал через FF (который работал). так что я снова открыл IE и попробовал через него, и он работал нормально .... не знаю, в чем проблема, но теперь кажется, что все нормально

0 голосов
/ 22 марта 2010

Звучит так, что связыватель модели пытается связать с необнуляемым типом в методе действия.Метод действия, который вы перечислили, не имеет этого типа (запомнить).Ваши маршруты могут идти не туда, где вы думаете.Есть ли у вас метод действия в одном из ваших контроллеров, который имеет параметр RememberMe как bool?

РЕДАКТИРОВАТЬ (после добавления дополнительной информации к вопросу):

Если флажок не установлен, онне вернуть значение.Это будет ноль.Вам нужно добавить скрытое значение над флажком с таким же именем, как это:

<input type="hidden" name="rememberMe" value="false" />

Или использовать тип bool с нулевым значением?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...