Как отобразить окно сообщения об ошибке в веб-приложении asp.net c #
-
19-08-2019 - |
Вопрос
У меня есть веб-приложение ASP.NET, и я хотел знать, как отобразить окно сообщения об ошибке при возникновении исключения. Р>
Например,
try
{
do something
}
catch
{
messagebox.write("error");
//[This isn't the correct syntax, just what I want to achieve]
}
[В окне сообщения отображается ошибка]
Спасибо
Решение
Вы не можете разумно отобразить окно сообщения ни на компьютере клиента, ни на сервере. На клиентском компьютере вы захотите перенаправить на страницу ошибки с соответствующим сообщением об ошибке, возможно, включая сообщение об исключении и трассировку стека, если хотите. На сервере вы, вероятно, захотите сделать какую-нибудь запись, либо в журнал событий, либо в файл журнала.
try
{
....
}
catch (Exception ex)
{
this.Session["exceptionMessage"] = ex.Message;
Response.Redirect( "ErrorDisplay.aspx" );
log.Write( ex.Message + ex.StackTrace );
}
Обратите внимание, что " log " Вы должны реализовать это, возможно, используя log4net или какую-либо другую утилиту ведения журналов.
Другие советы
Вы не можете просто вызвать messagebox.write, потому что вы отключены от клиента. Вы должны зарегистрировать код JavaScript, который показывает окно сообщения:
this.RegisterClientScriptBlock(typeof(string), "key", string.Format("alert('{0}');", ex.Message), true);
использование MessageBox.Show () приведет к тому, что на сервере отобразится окно сообщения, и поток не сможет обрабатывать дальнейший запрос, если окно не закрыто.
Что вы можете сделать, это
this.Page.ClientScript.RegisterStartupScript(this.GetType(),"ex","alert('" + ex.Message + "');", true);
это будет показывать исключение на стороне клиента, если исключение не всплывает.
В прошлом я делал так, чтобы что-то на странице заполнялось информацией, когда выдается исключение. MessageBox предназначен для оконных форм и не может использоваться для веб-форм. Я полагаю, вы могли бы разместить на странице какой-нибудь javascript, чтобы сделать предупреждение:
Response.Write("<script>alert('Exception: ')</script>");
Не думаю, что вы захотите показать детали исключения. Нам пришлось прекратить делать это, потому что один из наших клиентов не хотел, чтобы их пользователи видели все, что было доступно в деталях исключения. Попробуйте отобразить окно JavaScript с некоторой информацией, объясняющей, что возникла проблема.
Если вы хотите обработать все свои ошибки в одном месте, вы можете использовать файл global.asax (также известный как файл глобального приложения) вашего веб-приложения и работать с событием ошибки приложения. Это выглядит так: сначала вы добавляете глобальный файл приложения в свой проект, а затем в событие Application_Error добавляете некоторый код обработки ошибок, например:
void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\nError Message:" + objErr.Message.ToString() +
"\nStack Trace:" + objErr.StackTrace.ToString();
System.Diagnostics.EventLog.WriteEntry("Sample_WebApp", err, System.Diagnostics.EventLogEntryType.Error);
Server.ClearError();
Response.Redirect(string.Format("{0}?exceptionMessage={1}", System.Web.VirtualPathUtility.ToAbsolute("~/ErrorPage.aspx"), objErr.Message));
}
Это запишет технические подробности вашего исключения в системный журнал событий (если вам нужно проверить ошибку позже) Затем на вашем ErrorPage.aspx вы получаете сообщение об исключении из строки запроса в событии Page_Load. Как его отобразить, зависит от вас (вы можете использовать предупреждение javascript, предложенное в других ответах, или просто передать текст в литерал asp.net
Надеюсь, это поможет. Приветствия
Если вы используете .NET Core с MVC и Razor, у вас есть несколько уровней предварительной обработки перед отображением вашей страницы. Затем я предлагаю вам попробовать добавить условное сообщение об ошибке вверху страницы просмотра, например:
В ViewController.cs:
if (file.Length < 800000)
{
ViewData["errors"] = "";
}
else
{
ViewData["errors"] = "File too big. (" + file.Length.ToString() + " bytes)";
}
В View.cshtml:
@if (ViewData["errors"].Equals(""))
{
@:<p>Everything is fine.</p>
}
else
{
@:<script>alert('@ViewData["errors"]');</script>
}