发布到 Azure 时 TempData 不工作
TempData not working when published to Azure
我正在使用一个网站来掌握 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 上打开流日志,发现以下消息:
Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware: Cookie '.AspNetCore.Mvc.CookieTempDataProvider' suppressed due to consent policy
事实证明,当我搭建我的网站时,我删除了 .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;
});
我正在使用一个网站来掌握 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 上打开流日志,发现以下消息:
Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware: Cookie '.AspNetCore.Mvc.CookieTempDataProvider' suppressed due to consent policy
事实证明,当我搭建我的网站时,我删除了 .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;
});