HttpContext در BlazorSSR
نویسنده: ع ابراهیمی
تاریخ: ۱۴۰۳/۰۵/۱۷ ۰۳:۱۷
آدرس: www.dntips.ir
سلام
مشابه سایت جاری از یک CascadingValue بنام ApplicationState در برنامه استفاده کرده ام. در این ApplicationState اعضایی وجود دارند مانند
public CurrentUserModel? CurrentUser { set; get; }
public string? UserName { get; set; }
[CascadingParameter]
public HttpContext HttpContext { set; get; }
چنانچه فایل App برنامه بصورت زیر باشد.
<head>
<HeadOutlet />
</head>
<body>
<Routes />
</body>
</html>
HttpContext نال نیست ولی اعضای دیگر مانند CurrentUser , UserName در سایر صفحات نال نشان میدهد. نمونه عکس زیر
پس از تغییر HeadOutlet و Routes فایل App به InteractiveServer اینبار برعکس میشود و HttpContext نال میشود و اعضای دیگر ApplicationState مقدار دارند
<body>
<Routes @rendermode="RenderModeForPage" />
<script src="_framework/blazor.web.js"></script>
</body>
</html>
@code {
[CascadingParameter]
private HttpContext HttpContext { get; set; } = default!;
private IComponentRenderMode? RenderModeForPage => HttpContext.Request.Path.StartsWithSegments("/Account")
? null
: InteractiveServer;
}
مشابه عکس زیر
راه حل نال نشدن همه اعضاء در هردو صورت InteractiveServer و یا غیر InteractiveServer چیست؟
با تزریق
[Inject] IHttpContextAccessor HttpContextAccessor{ get; set; }
در ApplicationState و مقدار دهی HttpContext مشکل حل میشود ولی شما در سایت از این روش استفاده نکرده اید
protected override async Task OnInitializedAsync()
{
this.HttpContext = HttpContextAccessor.HttpContext;
CurrentUser = new CurrentUserModel
{
IsAdmin = true
};
}