簡體   English   中英

當我嘗試在 .NET Core 中反序列化 FormFile 對象時,為什么會出現奇怪的異常?

[英]Why am I getting a strange exception when I try to de-serialize a FormFile object in .NET Core?

我有一個 MVC .NET Core Web 應用程序,在一個控制器方法中,我正在序列化一個名為“file”的 FormFile 對象,如下所示:

var serializedFile = JsonConvert.SerializeObject(file, new JsonSerializerSettings
                    {
                        TypeNameHandling = TypeNameHandling.Auto,
                        NullValueHandling = NullValueHandling.Ignore,
                    });

然后在同一個控制器方法中,我將此序列化變量存儲在 TempData 中,如下所示:

TempData["myFile"] = serializedFile ;

然后在另一個控制器方法中,我試圖反序列化這個對象,如下所示:

    var deserializedFile = JsonConvert.DeserializeObject<FormFile>(TempData["myFile"].ToString(),
        new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            NullValueHandling = NullValueHandling.Ignore,
        });

但是當我這樣做時,我拋出了這個異常:Newtonsoft.Json.JsonSerializationException: 'Microsoft.AspNetCore.Http.FormFile'上的'錯誤設置值到'ContentDisposition'。' 內部異常 NullReferenceException:未將對象引用設置為對象的實例。

我已經嘗試了很長時間且令人沮喪,但我一直無法弄清楚為什么會發生這種情況。 任何幫助,將不勝感激? 謝謝!

您必須修復臨時數據名稱

TempData["myFile"] = serializedFile ;
// and 
TempData["theFile"].ToString(),

您應該只選擇一個 - “myFile”或“theFile”

為了防止異常,最好使用這種語法

if (TempData.ContainsKey("myFile"))
{
.....
}

TempData 默認容量很小,因為它被保存為cookies。它的大小小於4kb。 您可以獲得數據的原因之一可能是這個。 您必須配置會話以允許保留更多數據。

為此,您可以遵循此https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-3.1&WT.mc_id=DT-MVP-5003235#configure-the-臨時數據提供者

另一個原因是 TempData 在第一次讀取后清除。 因此,如果您之前使用過它,它也可以為 null。 要保留數據,您必須使用 Keep 或 Peak 關鍵字閱讀。 它不會永遠保留數據,而只會在 2 個請求之間保留數據。 此數據也消失后。

或者,您可以使用 Session 而不是 TempData,但它會降低應用程序的可伸縮性,因為它必須為每個連接的用戶創建一個 Session 對象,並且每個對象都需要一些服務器資源內存或硬盤驅動器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM