نحوه کنترل خطاها در Asp.net Core
سلام دوستان. می خواستم بدونم چجوری میتونم خطاهایی که در پروژه به وجود میاد رو کنترل کنم ؟
پروژه رو با Asp.net core نوشتم.
منظورم از خطا هر نوع خطایی هست که ممکنه به وجود بیاد. در واقع میخوام یک صفحه ای داشته باشم که پیغام بدم "خطایی در سیستم به وجود آمده است" و هر خطایی که رخ بده برنامه کرش نکنه و به این صفحه هدایت بشه
پاسخ هوش مصنوعی
برای کنترل خطاها در ASP.NET Core و هدایت کاربر به یک صفحه خطا، شما می توانید از Middleware سفارشی استفاده کنید یا تنظیمات مربوط به خطاها را در Startup.cs انجام دهید.
در زیر روش استفاده از Middleware برای کنترل خطاها آورده شده است:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private Task HandleExceptionAsync(HttpContext context, Exception ex)
{
context.Response.Clear();
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "text/html";
return context.Response.WriteAsync($"خطایی در سیستم به وجود آمده است
{ex.Message}
");
}
}
حالا شما باید این Middleware را در متد Configure در Startup.cs اضافه کنید:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware();
// سایر Middleware ها
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
با این کار، هرگونه خطایی که در برنامه شما ایجاد شود به این Middleware رسیده و کاربر به صفحه ای که شما تعیین کرده اید هدایت می شود و شما می توانید پیغام خطا را به کاربر نمایش دهید.
میتونید از middleware به نام UseExceptionHandler استفاده کنید.
روش کار :
1- ابتدا در فایل startup و متد Configure، کد زیر را اضافه کنید:
app.UseExceptionHandler("/your_view");
2- view مربوطه رو میتونید بنا بر سلیقه خودتون طراحی کنید.
برای کنترل خطا در Asp.net Core در کلاس Startup.cs و در فایل Configure قطعه کد زیر رو اضافه کنید. (دقت کنید که این قطعه کد به صورت پیش فرض وجود داره.)
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
خب همونطوری که می بینید یک آدرس در کد بالا وجود داره یعنی کنترلر Home و اکشن Error. پس در کنترلر Home این اکشن رو به وجود بیارید.
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
خب حالا یک View به نام Error در پوشه Views/Shared ایجاد کنید و متن مورد نظر خودتون جهت نمایش رو توی این ویو بنویسید. در این صورت وقتی خطایی رخ میده به جای کرش کردن یا نمایش کدهای برنامه ویوی Error نمایش داده میشه.
نکته : دقت کنید که شما باید در فایل launchsetting.json حتما مقدار متغیر ASPNETCORE_ENVIRONMENT رو برابر با Production قرار بدید.
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:50691",
"sslPort": 44346
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
},
"WebAutomationSystem": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
}
کسب اطلاعات بیشتر در مورد Error Handling
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2