دسته بندی ها
18:10 1398/07/18

کنترل خطاهای 401 ، 500 و 404 در Asp.net core

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Asp.net Core

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

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

برای مدیریت خطاها در ASP.NET Core API، می توانید از middleware استفاده کنید. در کد زیر، نحوه کنترل خطاهای 401، 404 و 500 را مشاهده می کنید. این کد را می توانید در فایل Startup.cs خود قرار دهید:


public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/api/error"); // مسیر صفحه خطا
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.Use(async (context, next) =>
        {
            await next();

            if (context.Response.StatusCode == 401)
            {
                // مدیریت خطای 401
                context.Response.Redirect("/api/error/unauthorized");
            }
            else if (context.Response.StatusCode == 404)
            {
                // مدیریت خطای 404
                context.Response.Redirect("/api/error/notfound");
            }
            else if (context.Response.StatusCode == 500)
            {
                // مدیریت خطای 500
                context.Response.Redirect("/api/error/internalservererror");
            }
        });

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

سپس می توانید کنترلر مخصوص خطاها را تعریف کنید:


[ApiController]
[Route("api/error")]
public class ErrorController : ControllerBase
{
    [HttpGet("unauthorized")]
    public IActionResult Unauthorized()
    {
        return StatusCode(401, new { message = "دسترسی غیرمجاز است." });
    }

    [HttpGet("notfound")]
    public IActionResult NotFound()
    {
        return StatusCode(404, new { message = "صفحه پیدا نشد." });
    }

    [HttpGet("internalservererror")]
    public IActionResult InternalServerError()
    {
        return StatusCode(500, new { message = "خطای داخلی سرور." });
    }
}

با استفاده از این کد، می توانید خطاهای مختلف را کنترل کرده و پاسخ های مناسبی به کلاینت ارسال کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 23:24 1398/07/26

با سلام

برای کنترل خطا توی Asp.net core میتونید توی فایل startup.cs و در متد Configure کدهای زیر رو بنویسید.

برای کنترل خطای 404 

   app.Use(async (context, next) =>
            {
                await next();
                if (context.Response.StatusCode == 404)
                {
                    context.Request.Path = "/home/err404";
                    await next();
                }
            });

 

و برای کنترل سایر خطاها هم

 

    if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

 

مجددا تاکید میکنم هر ذو قطعه کد در مت د configure باشه.

بعد از این برای هر کدوم یک ویو به نام 404 و Error در کنترلر Home بسازید.

در مورد خطای 404 به صورت اتوماتیک منتقل میشه به این صفحه اما در مورد خطاها میتونید در بلوک های Try و Catch و در بلوک Catch کاربر رو منتقل کنید به کنترلر Home و اکشن Error

 

موفق باشید

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