我們正在從 ASPNET MVC5 遷移到 ASPNET Core,這意味著我們需要重構一些代碼。
我們使用 Session = model 將模型存盤在會話中,然后從另一個控制器中檢索它。
我們了解此選項已在 Core 中停止使用。
我們嘗試使用:
HttpContext.Session.SetString("Data", JsonConvert.SerializeObject(model));
但是,當使用反序列化時:
var json = HttpContext.Session.GetString("Data");
var model = JsonConvert.DeserializeObject<SearchListViewModel>(json);
生成的模型不一樣 - 它是一個長字串而不是結構化串列(這是在序列化之前)。
有沒有更好的方法來實作將模型從一個控制器傳遞到另一個控制器?
uj5u.com熱心網友回復:
如果需要,您仍然可以使用會話。你只需要在啟動時配置它
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddSession();
....another your code
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
... another your code
}
uj5u.com熱心網友回復:
要Session在您的專案中進行配置,您需要執行以下操作:
在您Startup.cs的Configure方法下,添加以下內容:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
}
然后在ConfigureServices方法下,添加:
public void ConfigureServices(IServiceCollection services)
{
//Added for session state
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
});
}
創建物件型別的模型類(無論您想存盤什么)。我舉一個簡單的例子:
public class SearchListViewModel
{
public int SearchID{ get; set; }
public string SearchName{ get; set; }
//so on
}
然后創建一個SessionExtension助手來設定和檢索您的復雜物件為 JSON:
public static class SessionExtensions
{
public static void SetObjectAsJson(this ISession session, string key, object value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T GetObjectFromJson<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
}
然后最后將會話中的復雜物件設定為:
var search= new SearchListViewModel();
search.SearchID= 1;
search.SearchName= "Test";
HttpContext.Session.SetObjectAsJson("SearchListViewModel", search);
要在會話中檢索復雜物件:
var searhDetails = HttpContext.Session.GetObjectFromJson<SearchListViewModel>("SearchListViewModel");
int searchID= SearchListViewModel.SearchID;
string searchName= SearchListViewModel.SearchName;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/419196.html
標籤:
