TempData不会在生产服务器上保留数据[ASP.NET CORE 2.1]

时间:2018-10-01 16:35:25

标签: asp.net asp.net-core-mvc-2.1

我遇到了一个问题,我已经搜索了文档,看是否我犯了一个错误或某些错误,但是没有找到我想要的答案。我的问题是,保存产品后,我使用PRG(Post-Redirect-Get)模式,以便用户在按浏览器后退按钮时不会重新提交表单。我使用TempData显示一条消息,因为它在删除之前将数据持久保存到下一个请求。这种方法在我的开发环境上可以正常工作。但是,在将应用程序部署到生产服务器之后,尽管操作方法遵循PRG模式并成功返回,但TempData不会持久化,也不会显示消息。

这是我显示消息的方式:

@if (TempData["Message"] != null)
{
    var message = JsonConvert.DeserializeObject<MessageModel>(TempData["Message"].ToString());
<div class="alert bg-@message.Class text-center alert-dismissible fade show fixed-bottom w-100" role="alert" style="margin:0">
    <h6 class="text-white">@message.Message</h6>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
</div>
}

这是方法示例:

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Edit(Product model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        var product = await _productRepository.GetProductAsync(model.ID);


        product.Name = model.Name; product.ProductCode = model.ProductCode; product.Category = model.Category;
        product.Description = model.Description;
        await _productRepository.UpdateAsync(product);

        TempData["Message"] = JsonConvert.SerializeObject(new MessageModel { Class = "success", Message = "Product has been successfully updated" });
        return RedirectToAction("Edit", new { id = model.ID });
    }

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

好吧,由于Asp.net Core中的常规数据保护法规支持,如果用户(在本例中为我)不同意数据收集,并且应用程序的CheckConsentNeeded设置为true,则所有非必要的cookie(TempData ,会话Cookie)不会发送到浏览器。在启用TempData和Session cookie之前,需要先对其进行跟踪。因此,解决方案是实施cookieConsentPartial文件并通过单击“确定”进行同意,或者将checkConsentNeeded设置为其默认值false。您可以在这里EU General Data Protection Regulation (GDPR) support in ASP.NET Core

了解更多信息