亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 PhysicalFile 時如何正確捕獲 FileNotFoundException

使用 PhysicalFile 時如何正確捕獲 FileNotFoundException

C#
aluckdog 2022-10-23 15:13:21
我在控制器方法中有這段代碼;try{    return PhysicalFile("c:\temp\my-non-existing-file.txt", "text/plain");}catch (FileNotFoundException){    return NotFound();}但是,在這種情況下不運行 catch 子句,而是將 a500 Internal Server Error返回給瀏覽器。讓開發人員錯誤頁面處于活動狀態,它表明FileNotFoundException確實拋出了 a,但調用堆棧顯示它來自中間件。System.IO.FileNotFoundException: Could not find file 'c:\temp\my-non-existing-file.txt'.File name: 'c:\temp\my-non-existing-file.txt'   at System.IO.FileInfo.get_Length()   at Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.GetFileInfo(String path)   at Microsoft.AspNetCore.Mvc.Infrastructure.PhysicalFileResultExecutor.ExecuteAsync(ActionContext context, PhysicalFileResult result)   at Microsoft.AspNetCore.Mvc.PhysicalFileResult.ExecuteResultAsync(ActionContext context)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()有人可以解釋如何正確處理這種情況并返回404 Not Found嗎?更新:添加了完整的堆棧(帶有一些名稱清理)
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

文件直到稍后才解析,當響應被假脫機時,這發生在您的操作已經退出之后。因此,您無法在此處捕獲該異常。您可能可以使用自定義中間件或異常處理程序來做一些事情,但老實說,為什么不直接執行以下操作:


var filename = "c:\temp\my-non-existing-file.txt";

if (System.IO.File.Exists(filename))

{

    return PhysicalFile(filename, "text/plain");

}

else

{

    return NotFound();

}

主動檢查條件總是比依賴捕獲異常要好。過度依賴異常處理會降低您的應用程序性能。


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號