EU:s allmänna dataskyddsförordning (GDPR) stöd i ASP.NET Core Blazor
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. För den aktuella utgåvan, se .NET 9-versionen av den här artikeln .
Viktig
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den aktuella utgåvan, se .NET 9-versionen av den här artikeln .
I den här artikeln beskrivs hur du implementerar stöd för EU:s allmänna dataskyddsförordning (GDPR) krav.
I filen Program
:
- Lägg till CookiePolicyOptions-konfigurationen för att kräva användarmedgivande för icke-nödvändiga cookies och ställ in same-site-policy till 'none'. Mer information finns i Arbeta med SameSite-cookies i ASP.NET Core.
- Lägg till standardimplementeringen för IHttpContextAccessor-tjänsten genom att anropa AddHttpContextAccessor.
builder.Services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
builder.Services.AddHttpContextAccessor();
I filen Program
före anropet till MapRazorComponentslägger du till Cookie Principmellanprogram genom att anropa UseCookiePolicy:
I filen Program
före anropet till MapBlazorHublägger du till Cookie Principmellanprogram genom att anropa UseCookiePolicy:
app.UseCookiePolicy();
Lägg till följande CookieConsent
komponent för att hantera cookie principmedgivande.
Komponenten använder en sammanställd JavaScript-fil, med namnet CookieConsent.razor.js
, för att läsa in en modul. Bekräfta eller justera sökvägen till den samlokaliserade filen i OnAfterRenderAsync
-metoden. Följande komponent förutsätter att komponenten och dess tillhörande JavaScript-fil finns i mappen Components
i appen.
CookieConsent.razor
:
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Http
@implements IAsyncDisposable
@inject IHttpContextAccessor Http
@inject IJSRuntime JS
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show"
role="alert">
Use this space to summarize your privacy and cookie use policy.
<a href="/privacy">Privacy Policy</a>
<button type="button" @onclick="AcceptPolicy" class="accept-policy close"
data-bs-dismiss="alert" aria-label="Close"
data-cookie-string="@cookieString">
Accept
</button>
</div>
}
@code {
private IJSObjectReference? module;
private ITrackingConsentFeature? consentFeature;
private bool showBanner;
private string? cookieString;
protected override void OnInitialized()
{
consentFeature = Http.HttpContext?.Features.Get<ITrackingConsentFeature>();
showBanner = !consentFeature?.CanTrack ?? false;
cookieString = consentFeature?.CreateConsentCookie();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./Components/CookieConsent.razor.js");
}
}
private async Task AcceptPolicy()
{
if (module is not null)
{
await module.InvokeVoidAsync("acceptPolicy", cookieString);
showBanner = false;
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Lägg till följande samplacerade JavaScript-fil för att underhålla funktionen acceptPolicy
i en JavaScript-modul.
CookieConsent.razor.js
:
export function acceptPolicy(cookieString) {
document.cookie = cookieString;
}
Lägg till <main>
-komponenten i RazorMainLayout
-markering för komponenten MainLayout.razor
(CookieConsent
):
<CookieConsent />
Anpassa värdet för cookie medgivande
Ange medgivandevärdet cookie genom att välja en anpassad sträng till CookiePolicyOptions.ConsentCookieValue. I följande exempel ändras standardvärdet "yes
" till "true
":
options.ConsentCookieValue = "true";
I Blazor WebAssembly appar är lokal lagring en praktisk metod för att upprätthålla en användares godkännande av en webbplatsens cookie policy. Följande metod demonstrerar tillvägagångssättet.
Om appen inte redan har en Shared
mapp för delade komponenter lägger du till en Shared
mapp i appen.
Lägg till namnområdet för delade komponenter i _Imports.razor
-filen. I följande exempel är appens namnområde BlazorSample
och den delade mappens namnområde är BlazorSample.Shared
:
@using BlazorSample.Shared
Lägg till följande CookieConsent
komponent för att hantera cookie principmedgivande.
Shared/CookieConsent.razor
:
@implements IAsyncDisposable
@inject IJSRuntime JS
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show"
role="alert">
Use this space to summarize your privacy and cookie use policy.
<a href="/privacy">Privacy Policy</a>
<button type="button" @onclick="AcceptPolicy" class="accept-policy close"
data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">Accept</span>
</button>
</div>
}
@code {
private IJSObjectReference? module;
private bool showBanner = false;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./Shared/CookieConsent.razor.js");
showBanner = !await module.InvokeAsync<bool>("getCookiePolicyAccepted");
StateHasChanged();
}
}
private async Task AcceptPolicy()
{
if (module is not null)
{
await module.InvokeVoidAsync("setCookiePolicyAccepted");
showBanner = false;
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Lägg till följande placerade JavaScript-fil för att behålla funktionerna setCookiePolicyAccepted
och getCookiePolicyAccepted
i en JavaScript-modul.
Shared/CookieConsent.razor.js
:
export function getCookiePolicyAccepted() {
const cookiePolicy = localStorage.getItem('CookiePolicyAccepted');
return cookiePolicy === 'yes' ? true : false;
}
export function setCookiePolicyAccepted() {
localStorage.setItem('CookiePolicyAccepted', 'yes');
}
I föregående exempel kan du ändra namnet på det lokala lagringsobjektet och värdet från "CookiePolicyAccepted
" och "yes
" till önskade värden. Om du ändrar ett eller båda värdena uppdaterar du båda funktionerna.
Lägg till <main>
-komponenten i RazorMainLayout
-markering för komponenten Layout/MainLayout.razor
(CookieConsent
):
<CookieConsent />
Ytterligare resurser
ASP.NET Core