دسته بندی ها
16:48 1399/05/17

نحوه کنترل خطاها در Asp.net Core

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2583
هوش مصنوعی

پاسخ هوش مصنوعی

برای کنترل خطاها در 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 رسیده و کاربر به صفحه ای که شما تعیین کرده اید هدایت می شود و شما می توانید پیغام خطا را به کاربر نمایش دهید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mohammad-i 10:58 1399/05/18

میتونید از middleware به نام UseExceptionHandler استفاده کنید.

روش کار :

1- ابتدا در فایل startup و متد Configure، کد زیر را اضافه کنید:

app.UseExceptionHandler("/your_view");

2- view مربوطه رو میتونید بنا بر سلیقه خودتون طراحی کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
پاسخ دهنده : saedbfd 13:44 1399/05/18

برای کنترل خطا در 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

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود