Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Door Rick Anderson
De volgende koppelingen bieden richtlijnen voor probleemoplossing:
- Problemen met ASP.NET Core in Azure App Service en IIS- oplossen
- Veelvoorkomende fout oplossen voor Azure App Service en IIS met ASP.NET Core-
- NDC Conference (Londen, 2018): Diagnose van problemen in ASP.NET Core Applications
- ASP.NET Blog: Problemen met ASP.NET kernprestaties oplossen
.NET Core SDK-waarschuwingen
Zowel de 32-bits als de 64-bits versies van de .NET Core SDK zijn geïnstalleerd
In het dialoogvenster Nieuw project voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
Zowel 32-bits als 64-bits versies van de .NET Core SDK zijn geïnstalleerd. Alleen sjablonen uit de 64-bits versies die op C:\Program Files\dotnet\sdk\zijn geïnstalleerd, worden weergegeven.
Deze waarschuwing wordt weergegeven wanneer zowel 32-bits (x86) als 64-bits (x64) versies van de .NET Core SDK zijn geïnstalleerd. Veelvoorkomende redenen waarom beide versies kunnen worden geïnstalleerd, zijn onder andere:
- U hebt het .NET Core SDK-installatieprogramma oorspronkelijk gedownload met behulp van een 32-bits computer, maar deze vervolgens gekopieerd en geïnstalleerd op een 64-bits computer.
- De 32-bits .NET Core SDK is geïnstalleerd door een andere toepassing.
- De verkeerde versie is gedownload en geïnstalleerd.
Verwijder de 32-bits .NET Core SDK om deze waarschuwing te voorkomen. Verwijderen uit het Configuratiescherm>Programma's en onderdelen>Verwijder of wijzig een programma. Als u begrijpt waarom de waarschuwing en de gevolgen ervan optreden, kunt u de waarschuwing negeren.
De .NET Core SDK is geïnstalleerd op meerdere locaties
In het dialoogvenster Nieuw project voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
De .NET Core SDK wordt op meerdere locaties geïnstalleerd. Alleen sjablonen van de SDK's die op C:\Program Files\dotnet\sdk\zijn geïnstalleerd, worden weergegeven.
U ziet dit bericht wanneer u ten minste één installatie van de .NET Core SDK in een map buiten C:\Program Files\dotnet\sdk\hebt. Dit gebeurt meestal wanneer de .NET Core SDK is geïmplementeerd op een computer met behulp van kopiëren/plakken in plaats van het MSI-installatieprogramma.
Verwijder alle 32-bits .NET Core SDK's en runtimes om deze waarschuwing te voorkomen. Verwijderen uit het Configuratiescherm>Programma's en onderdelen>Verwijder of wijzig een programma. Als u begrijpt waarom de waarschuwing en de gevolgen ervan optreden, kunt u de waarschuwing negeren.
Er zijn geen .NET Core SDK's gedetecteerd
In het dialoogvenster Nieuw project van Visual Studio voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
Er zijn geen .NET Core SDK's gedetecteerd, zorg ervoor dat ze zijn opgenomen in de omgevingsvariabele
PATH.Wanneer u een
dotnetopdracht uitvoert, wordt de waarschuwing weergegeven als:Het was niet mogelijk om geïnstalleerde dotnet-SDK's te vinden.
Deze waarschuwingen worden weergegeven wanneer de omgevingsvariabele PATH niet verwijst naar .NET Core SDK's op de computer. U kunt dit probleem als volgt oplossen:
- Installeer de .NET Core SDK. Download het nieuwste installatieprogramma van .NET Downloads.
- Controleer of de
PATHomgevingsvariabele verwijst naar de locatie waar de SDK is geïnstalleerd (C:\Program Files\dotnet\voor 64-bits/x64 ofC:\Program Files (x86)\dotnet\voor 32-bits/x86). Het SDK-installatieprogramma stelt normaal gesproken dePATHin. Installeer altijd dezelfde bitness-SDK's en runtimes op dezelfde computer.
Ontbrekende SDK na installatie van de .NET Core Hosting Bundle
Als u de .NET Core Hosting Bundle installeert, wordt de PATH .NET Core-runtime gewijzigd zodat deze verwijst naar de 32-bits versie (x86) van .NET Core (C:\Program Files (x86)\dotnet\). Dit kan leiden tot ontbrekende SDK's wanneer de 32-bits (x86) .NET Core-opdracht dotnet wordt gebruikt (er zijn geen .NET Core SDK's gedetecteerd). Om dit probleem op te lossen, verplaatst u C:\Program Files\dotnet\ naar een positie voor C:\Program Files (x86)\dotnet\ op de PATH.
Gegevens ophalen uit een app
Als een app in staat is om te reageren op aanvragen, kunt u de volgende gegevens van de app verkrijgen met behulp van middleware:
- Aanvraag: Methode, schema, host, pathbase, pad, queryreeks, headers
- Verbinding: Extern IP-adres, externe poort, lokaal IP-adres, lokale poort, clientcertificaat
- Identity: Naam, weergavenaam
- Configuratie-instellingen
- Omgevingsvariabelen
Plaats de volgende middlewarecode aan het begin van de aanvraagverwerkingspijplijn van de Startup.Configure methode. De omgeving wordt gecontroleerd voordat de middleware wordt uitgevoerd om ervoor te zorgen dat de code alleen in de Development omgeving wordt uitgevoerd.
Haal de omgeving op uit de Environment eigenschap van WebApplication. Bijvoorbeeld in if (app.Environment.IsDevelopment()) de volgende voorbeeldcode.
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Server.IISIntegration;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
if (app.Environment.IsDevelopment())
{
app.Run(async (context) =>
{
var sb = new StringBuilder();
var nl = System.Environment.NewLine;
var rule = string.Concat(nl, new string('-', 40), nl);
var authSchemeProvider = app.Services.
GetRequiredService<IAuthenticationSchemeProvider>();
sb.Append($"Request{rule}");
sb.Append($"{DateTimeOffset.Now}{nl}");
sb.Append($"{context.Request.Method} {context.Request.Path}{nl}");
sb.Append($"Scheme: {context.Request.Scheme}{nl}");
sb.Append($"Host: {context.Request.Headers["Host"]}{nl}");
sb.Append($"PathBase: {context.Request.PathBase.Value}{nl}");
sb.Append($"Path: {context.Request.Path.Value}{nl}");
sb.Append($"Query: {context.Request.QueryString.Value}{nl}{nl}");
sb.Append($"Connection{rule}");
sb.Append($"RemoteIp: {context.Connection.RemoteIpAddress}{nl}");
sb.Append($"RemotePort: {context.Connection.RemotePort}{nl}");
sb.Append($"LocalIp: {context.Connection.LocalIpAddress}{nl}");
sb.Append($"LocalPort: {context.Connection.LocalPort}{nl}");
sb.Append($"ClientCert: {context.Connection.ClientCertificate}{nl}{nl}");
sb.Append($"Identity{rule}");
sb.Append($"User: {context.User.Identity.Name}{nl}");
var scheme = await authSchemeProvider
.GetSchemeAsync(IISDefaults.AuthenticationScheme);
sb.Append($"DisplayName: {scheme?.DisplayName}{nl}{nl}");
sb.Append($"Headers{rule}");
foreach (var header in context.Request.Headers)
{
sb.Append($"{header.Key}: {header.Value}{nl}");
}
sb.Append(nl);
sb.Append($"WebSockets{rule}");
if (context.Features.Get<IHttpUpgradeFeature>() != null)
{
sb.Append($"Status: Enabled{nl}{nl}");
}
else
{
sb.Append($"Status: Disabled{nl}{nl}");
}
sb.Append($"Configuration{rule}");
var config = builder.Configuration;
foreach (var pair in config.AsEnumerable())
{
sb.Append($"{pair.Key}: {pair.Value}{nl}");
}
sb.Append(nl);
sb.Append(nl);
sb.Append($"Environment Variables{rule}");
var vars = System.Environment.GetEnvironmentVariables();
foreach (var key in vars.Keys.Cast<string>().OrderBy(key => key,
StringComparer.OrdinalIgnoreCase))
{
var value = vars[key];
sb.Append($"{key}: {value}{nl}");
}
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync(sb.ToString());
});
}
app.Run();
Fouten opsporen in ASP.NET Core-apps
De volgende koppelingen bevatten informatie over foutopsporing ASP.NET Core-apps.
- Foutopsporing van ASP Core in Linux
- Foutopsporing van .NET Core op Unix via SSH
- Quickstart: Fouten opsporen ASP.NET met het Visual Studio-foutopsporingsprogramma
- Bekijk dit GitHub-probleem voor meer informatie over foutopsporing.
Door Rick Anderson
De volgende koppelingen bieden richtlijnen voor probleemoplossing:
- Problemen met ASP.NET Core in Azure App Service en IIS- oplossen
- Veelvoorkomende fout oplossen voor Azure App Service en IIS met ASP.NET Core-
- NDC Conference (Londen, 2018): Diagnose van problemen in ASP.NET Core Applications
- ASP.NET Blog: Problemen met ASP.NET kernprestaties oplossen
.NET Core SDK-waarschuwingen
Zowel de 32-bits als de 64-bits versies van de .NET Core SDK zijn geïnstalleerd
In het dialoogvenster Nieuw project voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
Zowel 32-bits als 64-bits versies van de .NET Core SDK zijn geïnstalleerd. Alleen sjablonen uit de 64-bits versies die op C:\Program Files\dotnet\sdk\zijn geïnstalleerd, worden weergegeven.
Deze waarschuwing wordt weergegeven wanneer zowel 32-bits (x86) als 64-bits (x64) versies van de .NET Core SDK zijn geïnstalleerd. Veelvoorkomende redenen waarom beide versies kunnen worden geïnstalleerd, zijn onder andere:
- U hebt het .NET Core SDK-installatieprogramma oorspronkelijk gedownload met behulp van een 32-bits computer, maar deze vervolgens gekopieerd en geïnstalleerd op een 64-bits computer.
- De 32-bits .NET Core SDK is geïnstalleerd door een andere toepassing.
- De verkeerde versie is gedownload en geïnstalleerd.
Verwijder de 32-bits .NET Core SDK om deze waarschuwing te voorkomen. Verwijderen uit het Configuratiescherm>Programma's en onderdelen>Verwijder of wijzig een programma. Als u begrijpt waarom de waarschuwing en de gevolgen ervan optreden, kunt u de waarschuwing negeren.
De .NET Core SDK is geïnstalleerd op meerdere locaties
In het dialoogvenster Nieuw project voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
De .NET Core SDK wordt op meerdere locaties geïnstalleerd. Alleen sjablonen van de SDK's die op C:\Program Files\dotnet\sdk\zijn geïnstalleerd, worden weergegeven.
U ziet dit bericht wanneer u ten minste één installatie van de .NET Core SDK in een map buiten C:\Program Files\dotnet\sdk\hebt. Dit gebeurt meestal wanneer de .NET Core SDK is geïmplementeerd op een computer met behulp van kopiëren/plakken in plaats van het MSI-installatieprogramma.
Verwijder alle 32-bits .NET Core SDK's en runtimes om deze waarschuwing te voorkomen. Verwijderen uit het Configuratiescherm>Programma's en onderdelen>Verwijder of wijzig een programma. Als u begrijpt waarom de waarschuwing en de gevolgen ervan optreden, kunt u de waarschuwing negeren.
Er zijn geen .NET Core SDK's gedetecteerd
In het dialoogvenster Nieuw project van Visual Studio voor ASP.NET Core ziet u mogelijk de volgende waarschuwing:
Er zijn geen .NET Core SDK's gedetecteerd, zorg ervoor dat ze zijn opgenomen in de omgevingsvariabele
PATH.Wanneer u een
dotnetopdracht uitvoert, wordt de waarschuwing weergegeven als:Het was niet mogelijk om geïnstalleerde dotnet-SDK's te vinden.
Deze waarschuwingen worden weergegeven wanneer de omgevingsvariabele PATH niet verwijst naar .NET Core SDK's op de computer. U kunt dit probleem als volgt oplossen:
- Installeer de .NET Core SDK. Download het nieuwste installatieprogramma van .NET Downloads.
- Controleer of de
PATHomgevingsvariabele verwijst naar de locatie waar de SDK is geïnstalleerd (C:\Program Files\dotnet\voor 64-bits/x64 ofC:\Program Files (x86)\dotnet\voor 32-bits/x86). Het SDK-installatieprogramma stelt normaal gesproken dePATHin. Installeer altijd dezelfde bitness-SDK's en runtimes op dezelfde computer.
Ontbrekende SDK na installatie van de .NET Core Hosting Bundle
Als u de .NET Core Hosting Bundle installeert, wordt de PATH .NET Core-runtime gewijzigd zodat deze verwijst naar de 32-bits versie (x86) van .NET Core (C:\Program Files (x86)\dotnet\). Dit kan leiden tot ontbrekende SDK's wanneer de 32-bits (x86) .NET Core-opdracht dotnet wordt gebruikt (er zijn geen .NET Core SDK's gedetecteerd). Om dit probleem op te lossen, verplaatst u C:\Program Files\dotnet\ naar een positie voor C:\Program Files (x86)\dotnet\ op de PATH.
Gegevens ophalen uit een app
Als een app in staat is om te reageren op aanvragen, kunt u de volgende gegevens van de app verkrijgen met behulp van middleware:
- Aanvraag: Methode, schema, host, pathbase, pad, queryreeks, headers
- Verbinding: Extern IP-adres, externe poort, lokaal IP-adres, lokale poort, clientcertificaat
- Identity: Naam, weergavenaam
- Configuratie-instellingen
- Omgevingsvariabelen
Plaats de volgende middlewarecode aan het begin van de aanvraagverwerkingspijplijn van de Startup.Configure methode. De omgeving wordt gecontroleerd voordat de middleware wordt uitgevoerd om ervoor te zorgen dat de code alleen in de Development omgeving wordt uitgevoerd.
Gebruik een van de volgende methoden om de omgeving te verkrijgen:
Voeg
IHostingEnvironmenttoe aan deStartup.Configuremethode en controleer de omgeving met de lokale variabele. In de volgende voorbeeldcode ziet u deze benadering.Wijs de omgeving toe aan een eigenschap in de
Startupklasse. Controleer de omgeving met behulp van de eigenschap (bijvoorbeeldif (Environment.IsDevelopment())).
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IConfiguration config)
{
if (env.IsDevelopment())
{
app.Run(async (context) =>
{
var sb = new StringBuilder();
var nl = System.Environment.NewLine;
var rule = string.Concat(nl, new string('-', 40), nl);
var authSchemeProvider = app.ApplicationServices
.GetRequiredService<IAuthenticationSchemeProvider>();
sb.Append($"Request{rule}");
sb.Append($"{DateTimeOffset.Now}{nl}");
sb.Append($"{context.Request.Method} {context.Request.Path}{nl}");
sb.Append($"Scheme: {context.Request.Scheme}{nl}");
sb.Append($"Host: {context.Request.Headers["Host"]}{nl}");
sb.Append($"PathBase: {context.Request.PathBase.Value}{nl}");
sb.Append($"Path: {context.Request.Path.Value}{nl}");
sb.Append($"Query: {context.Request.QueryString.Value}{nl}{nl}");
sb.Append($"Connection{rule}");
sb.Append($"RemoteIp: {context.Connection.RemoteIpAddress}{nl}");
sb.Append($"RemotePort: {context.Connection.RemotePort}{nl}");
sb.Append($"LocalIp: {context.Connection.LocalIpAddress}{nl}");
sb.Append($"LocalPort: {context.Connection.LocalPort}{nl}");
sb.Append($"ClientCert: {context.Connection.ClientCertificate}{nl}{nl}");
sb.Append($"Identity{rule}");
sb.Append($"User: {context.User.Identity.Name}{nl}");
var scheme = await authSchemeProvider
.GetSchemeAsync(IISDefaults.AuthenticationScheme);
sb.Append($"DisplayName: {scheme?.DisplayName}{nl}{nl}");
sb.Append($"Headers{rule}");
foreach (var header in context.Request.Headers)
{
sb.Append($"{header.Key}: {header.Value}{nl}");
}
sb.Append(nl);
sb.Append($"WebSockets{rule}");
if (context.Features.Get<IHttpUpgradeFeature>() != null)
{
sb.Append($"Status: Enabled{nl}{nl}");
}
else
{
sb.Append($"Status: Disabled{nl}{nl}");
}
sb.Append($"Configuration{rule}");
foreach (var pair in config.AsEnumerable())
{
sb.Append($"{pair.Path}: {pair.Value}{nl}");
}
sb.Append(nl);
sb.Append($"Environment Variables{rule}");
var vars = System.Environment.GetEnvironmentVariables();
foreach (var key in vars.Keys.Cast<string>().OrderBy(key => key,
StringComparer.OrdinalIgnoreCase))
{
var value = vars[key];
sb.Append($"{key}: {value}{nl}");
}
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync(sb.ToString());
});
}
}
Fouten opsporen in ASP.NET Core-apps
De volgende koppelingen bevatten informatie over foutopsporing ASP.NET Core-apps.
- Foutopsporing van ASP Core in Linux
- Foutopsporing van .NET Core op Unix via SSH
- Quickstart: Fouten opsporen ASP.NET met het Visual Studio-foutopsporingsprogramma
- Bekijk dit GitHub-probleem voor meer informatie over foutopsporing.