如何解决获取异常“IFeatureCollection 已被处理对象名称:'Collection'”在 .net core 3.1 中更新会话
我想更新 .net 核心中的会话变量。当我点击控制器中的启动动作方法并使用
设置会话时HttpContext.Session().SetInt32("Percentage",10)
然后我调用了一些需要 5 分钟的同步方法。方法完成后,我想再次设置会话
HttpContext.Session().SetInt32("Percentage",35)
但这次我收到如下错误:
{"IFeatureCollection 已被处理。 对象名称:'集合'。"}
我从 GetData() 方法获取会话,该方法每 20 秒使用 ajax 调用从 index.cshtml 调用一次。
家庭控制器:
private async Task<IActionResult> Start(string token,string btnClick)
{
HttpContext.Session.SetInt32("Percentage",10);
//Getting user details.. that takes 5 minutes;
GetUserDetails();
HttpContext.Session.SetInt32("Percentage",35);
GetotherData();
//Getting other data.. that also takes 5-10 minutes;
HttpContext.Session.SetInt32("Percentage",55);
return View();
}
GetData 方法:
此方法每 20 秒从 index.cshtml 调用一次并获取会话数据
public JsonResult GetData()
{
var res1 = HttpContext.Session.GetInt32("Percentage") + "," + _appData.status + "," + SyncCheckvar;
return Json(res);
}
Index.cshtml:
这是我每 20 秒从控制器方法 GetData() 获取数据的 javascript 代码。
<script>
var bar = $('#progress_bar');
var percentage = null;
function stopProgress() {
clearInterval(progress);
}
//var progress = setInterval(function () {
// percentage++;
// if (percentage <= 100) {
// $('#progress_percentage').html(percentage + '%');
// if (percentage > 10) {
// bar.css('width',percentage + '%');
// console.log(percentage);
// }
// }
var progress = $(document).ready(function () {
window.setInterval(function () {
$.ajax({
url: '@Url.Action("GetData","Home")',async: false,type: "GET",success: function (result) {
var res = result.split(',');
var res1 = res[0];
var res2 = res[1];
var res3 = res[2];
$("#progress_percentage").empty();
$("#progress_percentage").append(res1);
$("#text_container").empty();
$("#text_container").append(res2);
$("#syncstatus").empty();
$("#syncstatus").append(res3);
},});
percentage = $('#progress_percentage').html();
//alert(percentage);
if (percentage < 100)
{
$('#progress_percentage').html(percentage + '%');
if (percentage > 10)
{
bar.css('width',percentage + '%');
// console.log(percentage);
if ($('#syncstatus').html() == "True")
{
if ($('#mainstart').is(':hidden'))
{
document.getElementById("syncbtndiv").style.display = "block";
//document.getElementById("mainstart").style.display = "block";
}
}
}
}
else
{
//stopProgress();
document.getElementById("loader_container").style.display = "none";
document.getElementById("triggerdetailsdiv").style.display = "none";
//document.getElementById("mainstart").style.display = "none";
if ($('#syncstatus').html() == "True")
{
if ($('#mainstart').is(':hidden'))
{
document.getElementById("syncbtndiv").style.display = "block";
}
}
}
},20000);
});
$(window).on('load',function () {
$.ajax({
url: '@Url.Action("GetData",success: function (result) {
var res = result.split(',');
var res1 = res[0];
var res2 = res[1];
$("#progress_percentage").empty();
$("#progress_percentage").append(res1);
$("#text_container").empty();
$("#text_container").append(res2);
},});
percentage = $('#progress_percentage').html();
//alert(percentage);
if (percentage < 100) {
$('#progress_percentage').html(percentage + '%');
if (percentage > 10)
{
bar.css('width',percentage + '%');
// console.log(percentage);
}
}
else {
document.getElementById("loader_container").style.display = "none";
stopProgress()
}
});
</script>
这是我的 Startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
string[] initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
services
// Use OpenId authentication
.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
// Specify this is a web app and needs auth code flow
.AddMicrosoftIdentityWebApp(Configuration)
// Add ability to call web API (Graph)
// and get access tokens
.EnabletokenAcquisitionToCallDownstreamApi(options =>
{
Configuration.Bind("AzureAd",options);
},initialScopes)
// Use in-memory token cache
// See https://github.com/AzureAD/microsoft-identity-web/wiki/token-cache-serialization
.AddInMemoryTokenCaches()
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"));
services.AdddistributedMemoryCache();
// Require authentication
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new Authorizefilter(policy));
})
.AddSessionStateTempDataProvider()
// Add the Microsoft Identity UI pages for signin/out
.AddMicrosoftIdentityUI();
//services.AddSingleton<AppData>();
services.AddScoped<AppData>();
services.AddScoped<HomeController>();
services.AddRazorPages()
.AddSessionStateTempDataProvider();
var path = Directory.GetCurrentDirectory();
services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo($"{path}\\DataProtectionKeys\\Keys.xml"));
services.AddSession(options => {
options.IdleTimeout = TimeSpan.FromMinutes(30);//You can set Time
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
services.AddMvc(options=>options.EnableEndpointRouting=false);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app,IWebHostEnvironment env,ILoggerFactory loggerFactory)
{
var path = Directory.GetCurrentDirectory();
loggerFactory.AddFile($"{path}\\SentimentLogs\\Sentiment_Log.txt");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios,see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.UseMvc(endpoints =>
{
endpoints.MapRoute(
name: "default",template: "{controller=Home}/{action=Index}/{id?}");
});
app.UseCookiePolicy();
}
}
我想我错过了一些东西。请帮助我在 .net core 3.1 中正确实现会话
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。