Description
Roadmap
This issue represents the list of major investments our team will focus on during the .NET 7 timeframe. It does not include all the features and bugfixes we will be tackling during this time.
Note that this is an aspirational list of what we hope to get to. Many of these items will require thorough investigation and design, which can result in changes to our plans. We will end up cutting some things and making changes as we go but will try to keep this issue up to date to reflect on our progress and learnings.
The roadmap consists of three major areas below.
ASP.NET Core Runtime
Servers - Features
Here are just a few highlights of functionality we're planning to add to servers in the .NET 7 release:
- Add support for Output Caching #27387
- Port sharing using Kestrel+YARP #39640
- ARM64 support for ASP.NET Core on IIS (ANCM) #39281
- Kestrel support for WebSockets over HTTP/2 #7801
- OCSP Stapling support for Kestrel #4762
- [Theme] Add support for migrating .NET Framework apps to .NET Core #40078
Servers - Performance
.NET 6 was a big release for server performance, and we want to go even further in .NET 7 with improvements like these:
- Connection performance improvements #39846
- Enable kernel response buffering for HTTP.sys server #14455
- Improve HTTP/2 performance by using Channels #30235
HTTP/3 Support
HTTP/3 support shipped as a preview feature in .NET 6. For .NET 7, we want to finish it and make it a supported feature.
- HTTP/3: UseHttps configuration #34858
- Implement Http3 static response header compression #33980
- HTTP/3: Remove non-final h3 ALPNs #35032
- HTTP/3: Enable in Kestrel by default #36486
ASP.NET Web Frameworks
Minimal APIs
- Improve minimal api routing with grouping #36007
- Add support for endpoint filters #37853
- [Epic] OpenAPI in .NET 7 #37098
- Add antiforgery (anti-csrf) support to minimal endpoints #38630
- Support binding request body as Stream/ReadOnlySequence<byte> maybe ReadOnlyMemory<byte>/ReadOnlySpan<byte> #38153
- Consider a nicer API for configuring JsonOptions for minimal actions / route-to-code #39226
- Make IResult methods more testable #37502
- Minimal APIs doesn't support binding to StringValues from query or headers #36726
- Minimal Actions - array support in method signatures from querystring binding #32516
- Usage of ProblemDetails is inconsistent throughout ASP.NET Core #32957
- [Epic]: Configuring minimal APIs for auth should be suitably simple & featured #34545
- Design validation for Minimal APIs #30666
- [Epic]: Analyzers for Minimal APIs + MVC #36637 (Improve developer experience)
Extend the ability to customize parameter binding for Minimal APIs #35489Automatically inferOpenApiSecuritySchemes
from authentication configuration #39761
SignalR
- [Epic]: Support returning values from client invocations #5280
- [Epic] SignalR should have a C++ client #5301 (Improve existing C++ client)
Refreshing auth tokens for SignalR #5297
Rate Limiting
- Finish implementations for non-generic rate limiters (Fixed windows, Sliding windows, Token bucket, Concurrency limiter) #37381
- Partitioned (Design Generic) Rate Limiting APIs #37383
- [Epic]: Implement Rate Limiting Middleware in aspnetcore #37384
- Redesign the current aspnetcore Concurrency limiter middleware to use the new abstractions & implementations #38306
- Rate Limiting for Yarp implementations #37387
- Rate Limit for Kestrel - Design mechanism to apply back pressure to accepting connections #13295
- Move Rate Liming Abstractions/APIs to dotnet/runtime #37385
gRPC (dotnet-gRPC)
Orleans
- Implement POCO Grains orleans#7351
- Configurable serializers for grain persistence orleans#7471
- Remove SMS Provider orleans#7475
- Simplify stream configuration abstractions orleans#7473
Implement Stateless Service Abstractions orleans#7469[Epic]: Implement workflows as a primitive in Orleans orleans#7487Improve experience for Orleans customers deploying to Azure orleans#7486Add Orleans template for aspnetcore orleans#7479
ASP.NET Web UI
Blazor Hybrid
- Blazor with maui can not use <InputSelect> or <select> maui#4325
- Blazor Desktop tenets: Global readiness maui#2532
- Blazor Desktop test infrastructure and plans maui#2543
- Support configurability in opening external URLs maui#4338
- Hot Reload on MAUI Blazor App does not works. maui#2527
- Blazor Desktop: Support for auth maui#2529
- Blazor Desktop tenets: Security maui#2540
- Blazor Desktop tenets: Performance maui#2531
- Blazor Desktop tenets: Accessibility maui#2541
- Blazor Desktop dev tools enablement maui#2542
- Docs: Blazor hybrid walkthrough / getting started maui#3684
- Blazor hybrid project template updates maui#4127
- [Blazor webview] Exception handling for blazor webview maui#4441
Razor Compiler
- Generic Blazor component can't correctly infer it's type when type has an additional constraint #25588
- Update Razor compiler to use global:: more liberally #18757
- Compiler crashing issues reported through internal telemetry razor#7426
- Compiler crashing issues reported through internal telemetry #38878
- Compiler crashing issues reported through internal telemetry #38879
- [Blazor] CascadingTypeParameter problem #38479
- Add SDK snapshot tests for 5.0 apps #28489
dotnet/razor-compiler#190dotnet/razor-compiler#182dotnet/razor-compiler#153
Blazor
- Expose location changing event for NavigationManger #14962
- Calling InvokeAsync(StateHasChanged) causes page to fallback to default culture #28521
- Empty Blazor project template #32832
- Productize the custom elements support package #38447
- Improve prerendering and authentication experience in Blazor #27592
- Design proposal: Bind get/set/after modifiers #39837
- Components don't reset their received parameters during hot reload updates #31272
- [Blazor][Wasm] Dynamic and extensible authentication requests #42580
- Better MSAL support for additional scenarios #38122
- Developers targeting browser-wasm can use Web Crypto APIs runtime#40074
Enable integration with 3rd party assets management solutions #38445Continued improvements to Mono Method Body Replacement runtime#57365Add DateOnly and TimeOnly support to model binding & routing #34591Blazor Image component to display images that are not accessible through HTTP endpoints #25274Real multithreading in Blazor WebAssembly #17730Ability to run multiple Blazor server / Web assembly apps in the same document (micro-frontends) #38128Perform a pass cleaning up the web templates #30162Consider shipping ObjectGraphDataAnnotationsValidator / ValidateComplexTypeAttribute #28640Design for solving transient disposables on Blazor Server #26676APIs for components to persist state across circuits manually #30344Document how to configure HttpClient base address in Blazor Server using IHttpClientFactory #25758Ability to monitor circuit activity #30287Blazor Server: Provide APIs/extensibility for circuit eviction #17866
MVC
- Localised number format and wrong input type for decimal fields #6566
- Add support for implicit inference of
FromServices
for types that appear in DI #39667 - Inferring
FromBody.AllowEmptyBehavior = Allow
based nullability information #39754 - Consider adding support for
TryParse
as a way to bind primitives #39682 - EmptyBodyBehavior.Allow should allow a missing Content-Type #36466
- SkipStatusCodePagesAttribute should run before AuthorizeAttribute #10317
- ApiExplorer not handling multiple routes on same action method correctly #26234
- Inferring
FromServices
optionality based on nullability information #39757 - Razor Pages ComplexTypeModelBinder fails to handle the suggestion of "Alternatively, set the 'X' property to a non-null value in the 'YModel' constructor" #21916
IRouter.GetVirtualPath alternative in EndpointRouting #23041Allow matching routes without capturing arguments #27996Link generation improvements #38121LinkTagHelper should not use inline scripts #14736