Остановить опубликованную (Dev) страницу при переходе на страницу с ошибкой при отправке - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть проект, который имеет 2 страницы: индексную страницу с формой и страницу подтверждения. Локально весь проект работает без проблем. Однако, когда я публикую его на сайте разработчика и отправляю форму, он выводит меня на пользовательскую страницу с ошибкой при каждой отправке формы.

Я добавил блок try-catch вокруг всего моего контроллера, поэтому, если он вообще попадает в контроллер и выдает ошибки в любом месте контроллера, он должен перенаправить обратно на страницу индекса с ViewBag с указанием причины проблемы. Он даже не попадает в этот блок try-catch.

Сама форма использует HTML-помощник (синтаксис бритвы) для передачи информации, и она прекрасно работает локально, поэтому я не думаю, что это проблема.

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @id = "LogoRequest" }))
{
    <div class="col-lg-10 offset-lg-1 row">
        <input type="submit" id="submit" value="Submit Form" class="btn col-lg-2 offset-lg-10 col-12 mt-3" />
    </div>
}


 [HttpPost]
        public ActionResult Index(Requestor requestor)
        {
            try
            {


                //Creates necessary stuff if we need to redirect back to index page (so index is being filled properly)
                Requestor indexRequestor = new Requestor();
                requestor.Logos = toolbox.GetSelectListItems(LogoChoices());
                try
                {
                    bool isSqlInjection = requestor.IsObjectStringPropertiesSQLInjection();
                    if (isSqlInjection == true)
                    {
                        ViewBag.Message = "There was a problem with your input. Please ensure that SQL characters are not added to any field.";

                        return View(indexRequestor);
                    }

                    //check the web config to see if were dev or prod
                    if (WebConfigurationManager.AppSettings["server"] == "development")
                    { dev = true; }
                    else
                    { dev = false; }

                    //Do a bunch of stuff to send an email.


                    if (sent == false)
                    {
                        ViewBag.Message = "Your request could not be submitted at this time. Please try again later.";
                        return View(indexRequestor);
                    }
                }
                catch (Exception)
                {

                    throw;
                }

                ViewBag.Message = "Success! Your request has been sent.";
                return View("Confirmation");
            }
            catch (Exception ex)
            {
                ViewBag.Message = "An unexpected error has ocurred. " + ex.Message;
                Requestor indexRequestor = new Requestor();
                requestor.Logos = toolbox.GetSelectListItems(LogoChoices());
                return View(indexRequestor);
            }
        }

Опять же, все это работает локально, поэтому я не думаю, что это проблема. Я проверил мои строки подключения, и оба настроены правильно. Однажды у меня возникла проблема, когда я использовал аутентификацию Windows вместо предоставления имени пользователя и пароля, что вызвало ту же проблему, но на этот раз это не так.

Я добавил в нее наши средства обработки ошибок (созданные с помощьюElmah) но это не выдает ошибку. Я изменил пользовательские ошибки на «выкл» и пару разных вещей, и это тоже не попало.

Итак, суммируя, локальный проект работает нормально, а опубликованный - нет. Страница ошибок попадает (не из контроллера, а из FilterConfig (я так думаю?). Даже не попадает в контроллер, поэтому не пытается перехватить блок, чтобы показать ошибки. Не отображает пользовательские ошибки. Не передает ошибки в Elmah. И строки подключения не привязаны к локальным.

Мысли о следующих шагах, чтобы попробовать?

...