ASP.NET Core 9.0의 새로운 기능

이 문서에서는 ASP.NET Core 9.0의 가장 중요한 변경 내용과 관련 설명서에 대한 링크를 강조 표시합니다.

이 문서는 .NET 9 미리 보기 3용으로 업데이트되었습니다.

Blazor

이 섹션에서는 .에 대한 새로운 기능에 대해 설명합니다 Blazor.

생성자 주입

Razor 구성 요소는 생성자 주입을 지원합니다.

다음 예제에서 부분(코드 숨김) 클래스는 기본 생성자를 사용하여 서비스를 삽입합니다NavigationManager.

public partial class ConstructorInjection(NavigationManager navigation)
{
    protected NavigationManager Navigation { get; } = navigation;
}

자세한 내용은 ASP.NET Core Blazor 종속성 주입을 참조하세요.

대화형 서버 구성 요소에 대한 Websocket 압축

기본적으로 대화형 서버 구성 요소는 WebSocket 연결에 대한 압축을 사용하도록 설정하고 CSP(콘텐츠 보안 정책) 지시문으로 설정합니다'self'frame-ancestors. 이 지시문은 압축을 사용하도록 설정하거나 WebSocket 컨텍스트에 대한 구성이 제공될 때 앱이 제공되는 원본에만 앱을 포함 <iframe> 할 수 있도록 허용합니다.

압축을 설정하여 사용하지 않도록 설정할 ConfigureWebSocketOptions 수 있습니다. 그러면 공격null앱의 취약성이 줄어들지만 성능이 저하될 수 있습니다.

.AddInteractiveServerRenderMode(o => o.ConfigureWebSocketOptions = null)

WebSocket 압축을 허용하지만 브라우저가 앱을 포함할 수 없도록 하는 값 'none' (작은따옴표 필요)으로 <iframe>frame-ancestors 엄격한 CSP를 구성합니다.

.AddInteractiveServerRenderMode(o => o.ContentSecurityFrameAncestorsPolicy = "'none'")

자세한 내용은 다음 리소스를 참조하세요.

에서 키보드 컴퍼지션 이벤트 처리 Blazor

KeyboardEventArgs.IsComposing 속성은 키보드 이벤트가 컴퍼지션 세션의 일부인지를 나타냅니다. 키보드 이벤트의 컴퍼지션 상태를 추적하는 것은 국제 문자 입력 메서드를 처리하는 데 매우 중요합니다.

SignalR

이 섹션에서는 .에 대한 새로운 기능에 대해 설명합니다 SignalR.

허브의 SignalR 다형 형식 지원

이제 허브 메서드는 파생 클래스 대신 기본 클래스를 수락하여 다형 시나리오를 사용하도록 설정할 수 있습니다. 다형성을 허용하려면 기본 형식에 주석을 추가해야 합니다.

public class MyHub : Hub
{
    public void Method(JsonPerson person)
    {
        if (person is JsonPersonExtended)
        {
        }
        else if (person is JsonPersonExtended2)
        {
        }
        else
        {
        }
    }
}

[JsonPolymorphic]
[JsonDerivedType(typeof(JsonPersonExtended), nameof(JsonPersonExtended))]
[JsonDerivedType(typeof(JsonPersonExtended2), nameof(JsonPersonExtended2))]
private class JsonPerson
{
    public string Name { get; set; }
    public Person Child { get; set; }
    public Person Parent { get; set; }
}

private class JsonPersonExtended : JsonPerson
{
    public int Age { get; set; }
}

private class JsonPersonExtended2 : JsonPerson
{
    public string Location { get; set; }
}

최소 API

이 섹션에서는 최소 API에 대한 새로운 기능에 대해 설명합니다.

추가 InternalServerErrorInternalServerError<TValue>TypedResults

TypedResults 클래스는 최소 API에서 강력한 형식의 HTTP 상태 코드 기반 응답을 반환하는 데 유용한 수단입니다. TypedResults 이제 엔드포인트에서 "500 내부 서버 오류" 응답을 반환하기 위한 팩터리 메서드 및 형식이 포함됩니다. 다음은 500 응답을 반환하는 예제입니다.

var app = WebApplication.Create();

app.MapGet("/", () => TypedResults.InternalServerError("Something went wrong!"));

app.Run();

인증 및 권한 부여

이 섹션에서는 인증 및 권한 부여를 위한 새로운 기능에 대해 설명합니다.

OIDC 및 OAuth 매개 변수 사용자 지정

이제 OAuth 및 OIDC 인증 처리기에는 AdditionalAuthorizationParameters 일반적으로 리디렉션 쿼리 문자열의 일부로 포함된 권한 부여 메시지 매개 변수를 보다 쉽게 사용자 지정할 수 있는 옵션이 제공됩니다. .NET 8 이전 버전에서는 사용자 지정 처리기에서 사용자 지정 OnRedirectToIdentityProvider 콜백 또는 재정의된 BuildChallengeUrl 메서드가 필요합니다. 다음은 .NET 8 코드의 예입니다.

builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
    options.Events.OnRedirectToIdentityProvider = context =>
    {
        context.ProtocolMessage.SetParameter("prompt", "login");
        context.ProtocolMessage.SetParameter("audience", "https://api.example.com");
        return Task.CompletedTask;
    };
});

이제 앞의 예제를 다음 코드로 간소화할 수 있습니다.

builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
    options.AdditionalAuthorizationParameters.Add("prompt", "login");
    options.AdditionalAuthorizationParameters.Add("audience", "https://api.example.com");
});

HTTP.sys 확장 인증 플래그 구성

이제 HTTP.sys 새 EnableKerberosCredentialCaching 속성과 속성을 사용하여 플래그를 구성 HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING 하고 HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIALCaptureCredentials HTTP.sys AuthenticationManager Windows 인증 처리 방법을 최적화할 수 있습니다. 예시:

webBuilder.UseHttpSys(options =>
{
    options.Authentication.Schemes = AuthenticationSchemes.Negotiate;
    options.Authentication.EnableKerberosCredentialCaching = true;
    options.Authentication.CaptureCredentials = true;
});

기타

다음 섹션에서는 기타 새로운 기능에 대해 설명합니다.

개발자 예외 페이지의 엔드포인트 메타데이터

MVC 작업, 최소 API 및 gRPC 메서드에 추가된 특성은 엔드포인트 메타데이터예입니다. ASP.NET Core는 엔드포인트 메타데이터를 사용하여 라우팅, 인증 및 권한 부여, 응답 캐싱, 속도 제한, OpenAPI 생성 등과 같은 엔드포인트 동작을 제어합니다.

.NET 9는 개발자 예외 페이지에 메타데이터를 추가합니다. 새 메타데이터 정보는 다른 라우팅 정보와 함께 섹션에 표시됩니다 Routing . 이 정보를 사용하면 개발 중에 ASP.NET Core 오류를 더 쉽게 디버그할 수 있습니다. 다음 이미지는 개발자 예외 페이지의 새 메타데이터 정보를 보여줍니다.

개발자 예외 페이지의 새 메타데이터 정보

사전 디버깅 개선 사항

사전 및 기타 키-값 컬렉션의 디버깅 표시에는 향상된 레이아웃이 있습니다. 키는 값과 연결되지 않고 디버거의 키 열에 표시됩니다. 다음 이미지는 디버거에서 사전의 이전 및 새 표시를 보여 줍니다.

이전:

이전 디버거 환경

이후:

새 디버거 환경

ASP.NET Core에는 많은 키-값 컬렉션이 있습니다. 이 향상된 디버깅 환경은 다음에 적용됩니다.

  • HTTP 헤더
  • 쿼리 문자열
  • Cookies
  • 데이터 보기
  • 경로 데이터
  • 기능