取得部署 IIS 之 ASP.NET Core HTTP 500 錯誤細節
2 |
ASP.NET Core 有個預設行為,開發測試階段會顯示錯誤細節,包含錯誤訊息、Stack Trace 等資訊;當部署到 IIS 後,就只會顯示告知狀態碼為 HTTP ERROR 500,以避免程式資訊外洩形成資安風險:
嚴譯的系統會設計 Log 機制補捉及記錄錯誤,提供介面查詢或是後送 ELK、Prometheus 之類監控系統,自有管道可查。但若為簡單的 ASP.NET Core 網站,沒有這些機制,要怎麼臨時開啟顯示詳細錯誤訊息?(提醒:顯示詳細錯誤有資安風險,此暫時性做法不宜用於正式環境) .NET Framework 時代的 ASP.NET 可透過 <system.web><customErrors mode="Off/RemoteOnly" /></system.web>
開啟,ASP.NET Core 網站沒有 <system.web>
可設,要怎麼處堙?
解法一:查事件檢視器
解法二:
啟用 ASP.NET Core 執行 Log 檔記錄,web.config 找到 aspNetCore 元素,將 stdoutLogEnabled 設為 true:
<aspNetCore processPath="dotnet" arguments=".\iis-hosting.dll"
stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
但這個 Log 不會即時寫入磁碟,若要馬上看結果,可回收 AppPool:
解法三:
在 aspNetCore 元素加入 environmentVariable 指定 ASPNETCORE_ENVIRONMENT = Development:
<aspNetCore processPath="dotnet" arguments=".\iis-hosting.dll"
stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
如此 ASP.NET Core 網站會以開發模式運行,比照 F5 偵錯或 dotnet run 時顯示錯誤細節:
Comments
# by Ian
請問第三個解決方法 "在 aspNetCore 元素加入 environmentVariable 指定 ASPNETCORE_ENVIRONMENT = Development:" 這個檔案在那裡可以找到呢?
# by Jeffrey
to Ian, 在 web.config