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

Post a comment