Nguon: Microsoft Learn · .NET 8.0

Xử lý sự cố và gỡ lỗi dự án ASP.NET Core

Nguồn: Troubleshoot and debug ASP.NET Core projects

Bởi Rick Anderson

Các liên kết sau cung cấp hướng dẫn xử lý sự cố:

Cảnh báo từ .NET Core SDK

Cả hai phiên bản 32-bit và 64-bit của .NET Core SDK đều được cài đặt

Trong hộp thoại New Project (Dự án mới) cho ASP.NET Core, bạn có thể thấy cảnh báo sau:

Cả hai phiên bản 32-bit và 64-bit của .NET Core SDK đều được cài đặt. Chỉ các template từ phiên bản 64-bit được cài đặt tại 'C:\Program Files\dotnet\sdk\' mới được hiển thị.

Cảnh báo này xuất hiện khi cả phiên bản 32-bit (x86) và 64-bit (x64) của .NET Core SDK đều được cài đặt. Các lý do phổ biến khiến cả hai phiên bản được cài đặt bao gồm:

Gỡ cài đặt .NET Core SDK 32-bit để ngăn cảnh báo này. Gỡ cài đặt từ Control Panel (Bảng điều khiển) > Programs and Features (Chương trình và tính năng) > Uninstall or change a program (Gỡ cài đặt hoặc thay đổi chương trình). Nếu bạn hiểu lý do cảnh báo xuất hiện và các hàm ý của nó, bạn có thể bỏ qua cảnh báo.

.NET Core SDK được cài đặt ở nhiều vị trí

Trong hộp thoại New Project cho ASP.NET Core, bạn có thể thấy cảnh báo sau:

.NET Core SDK được cài đặt ở nhiều vị trí. Chỉ các template từ SDK được cài đặt tại 'C:\Program Files\dotnet\sdk\' mới được hiển thị.

Bạn thấy thông báo này khi có ít nhất một bản cài đặt .NET Core SDK trong thư mục ngoài C:\Program Files\dotnet\sdk\. Thường điều này xảy ra khi .NET Core SDK đã được triển khai trên máy bằng cách sao chép/dán thay vì trình cài đặt MSI.

Gỡ cài đặt tất cả .NET Core SDK và runtime 32-bit để ngăn cảnh báo này. Gỡ cài đặt từ Control Panel > Programs and Features > Uninstall or change a program. Nếu bạn hiểu lý do cảnh báo và hàm ý của nó, bạn có thể bỏ qua cảnh báo.

Không tìm thấy .NET Core SDK nào

Không tìm thấy .NET Core SDK nào, hãy đảm bảo chúng được bao gồm trong biến môi trường PATH.

Không thể tìm thấy bất kỳ dotnet SDK nào đã cài đặt.

Các cảnh báo này xuất hiện khi biến môi trường PATH không trỏ đến bất kỳ .NET Core SDK nào trên máy. Để giải quyết vấn đề này:

Thiếu SDK sau khi cài đặt .NET Core Hosting Bundle

Cài đặt .NET Core Hosting Bundle (gói lưu trữ) sẽ sửa đổi PATH khi nó cài đặt .NET Core runtime để trỏ đến phiên bản 32-bit (x86) của .NET Core (C:\Program Files (x86)\dotnet\). Điều này có thể dẫn đến thiếu SDK khi lệnh dotnet 32-bit (x86) của .NET Core được sử dụng (Không tìm thấy .NET Core SDK nào). Để giải quyết vấn đề này, hãy di chuyển C:\Program Files\dotnet\ lên trước C:\Program Files (x86)\dotnet\ trong PATH.

Lấy dữ liệu từ ứng dụng

Nếu ứng dụng có khả năng phản hồi các yêu cầu, bạn có thể lấy dữ liệu sau từ ứng dụng bằng middleware (phần mềm trung gian):

Đặt đoạn code middleware sau vào đầu pipeline xử lý yêu cầu của phương thức Startup.Configure. Môi trường được kiểm tra trước khi middleware chạy để đảm bảo code chỉ được thực thi trong môi trường Development (Phát triển).

Lấy môi trường từ thuộc tính Environment của WebApplication. Ví dụ: if (app.Environment.IsDevelopment()) như trong đoạn code mẫu sau.

csharp
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();

Gỡ lỗi ứng dụng ASP.NET Core

Các liên kết sau cung cấp thông tin về việc gỡ lỗi ứng dụng ASP.NET Core.