欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET Core處理錯(cuò)誤環(huán)境

 更新時(shí)間:2022年04月06日 15:27:53   作者:暗斷腸  
這篇文章介紹了ASP.NET Core處理錯(cuò)誤環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.前言

ASP.NET Core處理錯(cuò)誤環(huán)境區(qū)分為兩種:開(kāi)發(fā)環(huán)境和非開(kāi)發(fā)環(huán)境。

  • 開(kāi)發(fā)環(huán)境:開(kāi)發(fā)人員異常頁(yè)。
  • 非開(kāi)發(fā)環(huán)境:異常處理程序頁(yè)、狀態(tài)代碼頁(yè)。

在Startup.Configure方法里面我們會(huì)看到如下代碼:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
       //開(kāi)發(fā)環(huán)境
    } 
    else
    {
       //非開(kāi)發(fā)環(huán)境
    }
}

env.IsDevelopment()是判斷應(yīng)用程序運(yùn)行是在開(kāi)發(fā)環(huán)境還是非開(kāi)發(fā)環(huán)境,具體配置在Properties/launchSettings.json,找到ASPNETCORE_ENVIRONMENT屬性,默認(rèn)值是開(kāi)發(fā)環(huán)境(Development),具體環(huán)境配置知識(shí)點(diǎn)后面我們?cè)賮?lái)學(xué)習(xí)下。

2.開(kāi)發(fā)人員異常頁(yè)

向Startup.Configure方法添加代碼,以當(dāng)應(yīng)用在開(kāi)發(fā)環(huán)境中運(yùn)行時(shí)啟用此頁(yè):

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

開(kāi)發(fā)人員異常頁(yè)僅當(dāng)應(yīng)用程序在開(kāi)發(fā)環(huán)境中運(yùn)行時(shí)才會(huì)啟用,而且調(diào)用UseDeveloperExceptionPage要配置于任何要捕獲其異常的中間件前面。
該頁(yè)包括關(guān)于異常和請(qǐng)求的以下信息:

  • 堆棧跟蹤
  • 查詢(xún)字符串參數(shù)(如果有)
  • Cookie(如果有)
  • request header

3.異常處理程序頁(yè)

在下面的示例中,UseExceptionHandler 在非開(kāi)發(fā)環(huán)境中添加異常處理中間件:

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

Razor Pages應(yīng)用模板提供“頁(yè)面”文件夾中的Error頁(yè)(.cshtml)和PageModel類(lèi)(ErrorModel)。 對(duì)于MVC應(yīng)用,項(xiàng)目模板包括Error操作方法和Error視圖。操作方法如下:

[AllowAnonymous]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
    return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

不要使用HTTP方法屬性(如HttpGet)修飾錯(cuò)誤處理程序操作方法,因?yàn)闀?huì)阻止某些請(qǐng)求訪(fǎng)問(wèn)的方法。同時(shí)最好允許匿名訪(fǎng)問(wèn)方法,以便未經(jīng)身份驗(yàn)證的用戶(hù)能夠接收錯(cuò)誤視圖。
UseExceptionHandler中間還可以使用lambda進(jìn)行異常處理:

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
   app.UseExceptionHandler(errorApp =>
   {
        errorApp.Run(async context =>
        {
            context.Response.StatusCode = 500;
            context.Response.ContentType = "text/html";
            await context.Response.WriteAsync("<html lang=\"en\"><body>\r\n");
            await context.Response.WriteAsync("ERROR!<br><br>\r\n");
            var exceptionHandlerPathFeature = 
                context.Features.Get<IExceptionHandlerPathFeature>();
            // Use exceptionHandlerPathFeature to process the exception (for example, 
            // logging), but do NOT expose sensitive error information directly to 
            // the client.
            if (exceptionHandlerPathFeature?.Error is FileNotFoundException)
            {
                await context.Response.WriteAsync("File error thrown!<br><br>\r\n");
            }
            await context.Response.WriteAsync("<a href=\"/\">Home</a><br>\r\n");
            await context.Response.WriteAsync("</body></html>\r\n");
            await context.Response.WriteAsync(new string(' ', 512)); // IE padding
        });
    });
app.UseHsts();
}

4.狀態(tài)代碼頁(yè)

一般情況下,ASP.NET Core應(yīng)用程序不會(huì)為HTTP狀態(tài)代碼(如“404-未找到”)提供狀態(tài)代碼頁(yè)的。但若要提供狀態(tài)代碼頁(yè),可以使用狀態(tài)代碼頁(yè)中間件。

4.1 UseStatusCodePages中間件

若要啟用常見(jiàn)錯(cuò)誤狀態(tài)代碼的默認(rèn)純文本處理程序,請(qǐng)?jiān)赟tartup.Configure方法中調(diào)用 UseStatusCodePages:

app.UseStatusCodePages();

而這里有一點(diǎn)要注意的是,調(diào)用UseStatusCodePages中間件要在例如靜態(tài)文件中間件和 MVC中間件等中間件前面調(diào)用:

app.UseStatusCodePages();
app.UseStaticFiles();
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

下面通過(guò)運(yùn)行應(yīng)用程序在瀏覽器地址欄上輸入一個(gè)不存在地址看看配置該中間件后的效果:

很顯然當(dāng)我們輸入一個(gè)不存在地址之后就會(huì)打開(kāi)一個(gè)處理錯(cuò)誤的狀態(tài)代碼頁(yè)。
UseStatusCodePages中間件還有兩種重載使用方法,具體運(yùn)行效果就不一一截圖了,大家自行測(cè)試。

  • 包含格式字符串的 UseStatusCodePages:
app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");
  • 包含lambda的UseStatusCodePages:
app.UseStatusCodePages(async context =>
{
    context.HttpContext.Response.ContentType = "text/plain";
    await context.HttpContext.Response.WriteAsync(
        "Status code page, status code: " +
        context.HttpContext.Response.StatusCode);
});

4.2 UseStatusCodePagesWithRedirect中間件

  • 向客戶(hù)端發(fā)送“302 - 已找到”狀態(tài)代碼。
  • 將客戶(hù)端重定向到URL模板中的位置。

下面我們?cè)赟tartup.Configure方法中調(diào)用UseStatusCodePagesWithRedirect:

app.UseStatusCodePagesWithRedirects("/Error/{0}");

運(yùn)行應(yīng)用程序在瀏覽器上輸入不存在地址https://localhost:44353/1看看配置該中間件后的效果,你會(huì)發(fā)覺(jué)當(dāng)我們輸入上述地址后會(huì)跳轉(zhuǎn)到https://localhost:44353/Error/404鏈接去了,并顯示:

這就說(shuō)明白當(dāng)我們輸入一個(gè)不存在地址之后會(huì)重定向中間件設(shè)置的地址頁(yè)面去了。

到此這篇關(guān)于A(yíng)SP.NET Core處理錯(cuò)誤環(huán)境的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論