ASP.NET Core 1.0基礎之診斷
來自: http://www.cnblogs.com/yanbinliu/p/5173206.html
來源https://docs.asp.net/en/latest/fundamentals/diagnostics.html
ASP.NET Core 1.0包含了一些新的特性來輔助診斷問題。可以在Startup類中輕易地配置不同的handler來處理應用程序錯誤,顯示額外信息。
配置錯誤處理頁面
ASP.NET Core 1.0中可以在Startup類的Configure方法中為每個Request請求配置處理管道。在開發中,你可以非常方便地配置一個簡單的錯誤處理頁面。你只需要添加項目對Microsoft.AspNet.Diagnostics的依賴,然后在Configure方法中添加一行代碼。
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Diagnostics; using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Http; using System; using Microsoft.Extensions.DependencyInjection;namespace DiagDemo { public class Startup { // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { }
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (string.Equals(env.EnvironmentName, "Development", StringComparison.OrdinalIgnoreCase)) { app.UseDeveloperExceptionPage(); app.UseRuntimeInfoPage(); // default path is /runtimeinfo } else { // specify production behavior for error handling, for example: // app.UseExceptionHandler("/Home/Error"); // if nothing is set here, exception will not be handled. } app.UseWelcomePage("/welcome"); app.Run(async (context) => { if(context.Request.Query.ContainsKey("throw")) throw new Exception("Exception triggered!"); context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><body>Hello World!"); await context.Response.WriteAsync("<ul>"); await context.Response.WriteAsync("<li><a href=\"/welcome\">Welcome Page</a></li>"); await context.Response.WriteAsync("<li><a href=\"/?throw=true\">Throw Exception</a></li>"); await context.Response.WriteAsync("</ul>"); await context.Response.WriteAsync("</body></html>"); }); } }
}</pre>
如上代碼是在ASP.NET Core 1.0中的空模板中創建的,只包含了簡單異常處理產生機制(在36行)。如果querystring的“throw” key的值不為空,就會拋出異常。然后會調用21行的UseDeveloperExceptionPage方法,來調用中間件。
注意到調用UseDeveloperExceptionPage在包含在if代碼塊中間的,會先檢查當前環境。這是很好的實踐方式,因為你可能不愿意在生產環境中公開展示程序診斷信息。if語句會使用ASPNET_ENV環境變量,如果你使用的VS2015,你可以在web項目屬性中自定義環境變量。如下
![]()
將ASPNET_ENV 設置任何非Development的值,應用都不會調用UseDeveloperExceptionPage方法,而是返回500錯誤(沒有任何詳細信息,除非你配置了UseExceptionHandler())。在下面我們會看到error page所提供的特性(確保ASPNET_ENV被設置回Development)。
在開發中使用error page
在web處理管道中發生未處理異常時,默認error page會顯示一些有用的診斷信息。error page有幾個tab來顯示請求中異常相關的信息。第一個tab顯示stack trace
![]()
第二tab顯示Querystring 相關的信息
![]()
如上,你可以看到請求中傳遞的throw參數的值。本次請求沒有cookie,如果有的話,會在Cookies tab中。你可以看到傳遞的headers的值,如下。
![]()
Note:當前pre-release版本,ErrorPage的Cookies部分還不可用。詳見 ErrorPage Source 。
Azure上的Http 500錯誤
略
運行時info page
除了配置和顯示錯誤頁面外,你也可以通過調用擴展方法UseRuntimeInfoPage來添加運行時信息頁面。如下代碼,就可以開啟該功能。
app.UseRuntimeInfoPage();一旦添加了如上代碼,你就可以輸入/runtimeinfo來查看運行時信息、包信息等。如下。
</div>
當然這個請求路徑是可以更改的,你可以在調用UseRuntimeInfoPage()方法時指定。這個方法接收一個 RuntimeInfoPageOptions實例作為參數,它有一個Path屬性。例如,指定/info路徑,你可以像如下調用UseRuntimeInfoPage。
app.UseRuntimeInfoPage("/info")同UseDeveloperExceptionPage()擴展方法一樣,限制公共對診斷信息的獲取。因此本例中,值在開發環境中調用UseRuntimeInfoPage()方法。
Note:記住Startup類中的Configure方法定義的管道對所有的請求都是有效的,因此管道配置順序是很重要的。例如,如果你把UseRuntimeInfoPage()的調用放在app.Run()之后,則該方法是不會被調用的。因為app.Run會在調用UseRuntimeInfoPage之前處理請求。
</div>
welcome頁面
另一個有用的擴展方法是UseWelcome(),尤其是你在第一次運行ASP.NET Core 1.0程序時。配置如下。
app.UseWelcome()一旦調用該方法,它會處理所有請求,并返回很cool的hello頁面(默認情況下)。如下。
</div>
你也可以配置歡迎頁面只響應某些路徑(和UseRuntimeInfoPage類似)。如下代碼配置了歡迎頁面只響應/welcome路徑(別的請求路徑將會忽略,轉交給下個管道handler)。
app.UseWelcomePage("/welcome");按照本文如上配置Configure方法,將會按如下方式響應請求。
Path Result /runtimeinfo UseRuntimeInfoPage will handle and display runtime info page /welcome UseWelcomePage will handle and display welcome page paths without ?throw= app.Run() will respond with “Hello World!” paths with ?throw= app.Run() throws an exception; UseErrorPage handles, displays an error page Summary
在ASP.NET Core 1.0中,你可以很簡單的添加error page,查看diagnostic信息,或者簡單的響應一個歡迎頁面。
</div>本文由用戶 MerGrills 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊