У меня есть проект, который имеет 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. И строки подключения не привязаны к локальным.
Мысли о следующих шагах, чтобы попробовать?