【问题标题】:TempData not working when published to AzureTempData 在发布到 Azure 时不起作用
【发布时间】:2018-11-24 16:26:30
【问题描述】:

我正在使用一个网站来了解 Razor Pages。我有一个奇怪的情况,我不确定发生了什么或如何解决。我正在使用 [TempData] 传递重定向消息。该应用程序在本地完美运行。发布到 Azure 后,我添加了一个新项目并添加了该项目,我被重定向到索引页面,但我从未看到 TempData 消息。

这是我的索引页面:

public class IndexModel : PageModel
{
    private readonly TheFishRoom_MVC_Core.Data.FishRoomDbContext _context;

    public IndexModel(TheFishRoom_MVC_Core.Data.FishRoomDbContext context)
    {
        _context = context;
    }

    public IList<Coral> Coral { get; set; }

    [TempData]
    public string Message { get; set; }

    public bool ShowMessage => !string.IsNullOrEmpty(Message);

    public async Task OnGetAsync(string searchString)
    {
        if (!String.IsNullOrEmpty(searchString))
        {
            Coral = await _context.Corals.Where(s => s.Name.Contains(searchString)).ToListAsync();
        }
        else
        {
            Coral = await _context.Corals.ToListAsync();
        }
    }
}
} 

这是我的创建页面:

namespace TheFishRoom_MVC_Core.Pages.Corals
{
[Authorize(Roles = "Admin")]
public class CreateModel : PageModel
{
    private readonly FishRoomDbContext _context;

    public CreateModel(FishRoomDbContext context)
    {
        _context = context;
    }

    public IActionResult OnGet()
    {
        return Page();
    }

    [BindProperty]
    public Coral Coral { get; set; }

    [TempData]
    public string Message { get; set; }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        _context.Corals.Add(Coral);
        await _context.SaveChangesAsync();

        Message = "New Coral created successfully!";

        return RedirectToPage("./Index");
    }
}
}

该站点在本地可以工作...但不能发布到 Azure。

本地结果:

感谢任何帮助!

【问题讨论】:

  • 您是否在 Azure 中托管 Web Farm(两个或更多实例)?如果是这样,则需要使用 Azure Redis 缓存。
  • 我这不是单服务器实例...
  • 您找到解决方案了吗?我在发布到 Azure 时遇到了完全相同的问题(在重定向时显示警报的 TempData 在本地可以正常工作,但在 Azure 上却不行)。
  • 在使用 .NET Core 2.1 时遇到同样的问题。不知道为什么。

标签: asp.net-mvc razor-pages tempdata


【解决方案1】:

遇到了同样的问题。

在azure上开启流式日志,发现如下信息:

Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware:Cookie '.AspNetCore.Mvc.CookieTempDataProvider' 由于同意政策而被禁止

事实证明,当我为我的网站搭建脚手架时,我剥离了 .net Core MVC 应用程序中开箱即用的 GDPR Cookie 同意代码,该代码在接受时将创建 .AspNet.Consent cookie(值为“yes”) .

创建 cookie 后,TempData 开始工作。

如果您不受 GDPR 约束,您还可以通过将 CheckConsentNeeded 设置为 false 来更新 cookie 策略选项以不检查同意。

 services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2015-12-05
    • 2021-01-19
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2021-04-10
    • 2012-04-14
    相关资源
    最近更新 更多