Improve Minimal APIs support for request media types #35082#35230
Improve Minimal APIs support for request media types #35082#35230rafikiassumani-msft merged 34 commits intodotnet:mainfrom
Conversation
There was a problem hiding this comment.
Speaking to @halter73, the plan was for RequestDelegateFactory to return an IReadOnlyList<object> which will get added as endpoint metadata by the caller. Here's what I propose the API would look like:
public static RequestDelegateResult Create(MethodInfo methodInfo, Func<HttpContext, object>? targetFactory = null, RequestDelegateFactoryOptions? options = null)where
public sealed class RequestDelegateResult
{
public RequestDelegate RequestDelegate { get; }
public IReadOnlyList<object> EndpointMetadata { get; }
}| context.Results.SelectMany(r => r.SupportedRequestFormats), | ||
| requestType => | ||
| { | ||
| Assert.Equal("application/json", requestType.MediaType); |
There was a problem hiding this comment.
What's the behavior now? Is the MediaType just "" or something? Or is the collection empty? Let's just add a regression test for whatever we think the behavior should be in this case rather than delete the test.
|
/backport to release/6.0-rc1 |
|
Started backporting to release/6.0-rc1: https://github.com/dotnet/aspnetcore/actions/runs/1152357480 |
|
@rafikiassumanimsft backporting to release/6.0-rc1 failed, the patch most likely resulted in conflicts: $ git am --3way --ignore-whitespace --keep-non-patch changes.patch
Applying: add support for request media types
Applying: change namespace for acceptsmatcher policy
Applying: additional changes
Using index info to reconstruct a base tree...
M src/Http/Http.Extensions/src/RequestDelegateFactory.cs
M src/Http/Routing/src/Builder/MinimalActionEndpointRouteBuilderExtensions.cs
Falling back to patching base and 3-way merge...
Auto-merging src/Http/Routing/src/Builder/MinimalActionEndpointRouteBuilderExtensions.cs
Auto-merging src/Http/Http.Extensions/src/RequestDelegateFactory.cs
CONFLICT (content): Merge conflict in src/Http/Http.Extensions/src/RequestDelegateFactory.cs
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0003 additional changes
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Error: The process '/usr/bin/git' failed with exit code 128Please backport manually! |
…tnet#35230) * add support for request media types * change namespace for acceptsmatcher policy * additional changes * enable 415 when unsupported content type is provide * add accepts extension method on minimalActions endpoint * add IAcceptsMetadata to API description * add empty content type test * feat: add types for iacceptmetadata * change requestdelegate factory to return metatdata * clean RequestDelegateFactoryOptions.cs * change request delegate to return requestdelegateresult type * make apis property init only * adding constructor to requestdelegatefactoryResult * Fixups * fix merge errors * address pr comment * fix test error * remove options from params * implements iacceptsMetadata * fix test failures * fix test failures * move iacceptmetadata to shared source * add acceptsmetadata shared code to mvc * fix tests * address pr comments * address another comment * nit * fix duplicate media types * fix test failures Co-authored-by: Pranav K <prkrishn@hotmail.com>
* [release/6.0-rc1] Update dependencies from dotnet/runtime dotnet/efcore (#35513) * Set HttpSys read error log levels to debug #35490 (#35542) Co-authored-by: Chris R <Tratcher@outlook.com> * [release/6.0-rc1] Treat reference type parameters in oblivious nullability context as optional (#35526) * Treat parameters in oblivious nullability context as optional * Only apply fix for reference types * Update optionality check in API descriptor * Update check in BindAsync and Mvc.ApiExplorer test * HTTP/3: Use new QuicStream.ReadsCompleted property in transport (#35483) Co-authored-by: James Newton-King <james@newtonking.com> * HTTP/3: Fix incorrectly pooling aborted streams (#35441) * [release/6.0-rc1] Binding support for 'bool' values with InputRadioGroup and InputSelect (#35523) * Binding support for 'bool' values with InputRadioGroup and InputSelect (#35318) * Update CodeCheck.ps1 Co-authored-by: Brennan <brecon@microsoft.com> * [release/6.0-rc1] Update dependencies from dotnet/efcore dotnet/runtime (#35558) * Update dependencies from https://github.com/dotnet/efcore build 20210820.19 Microsoft.EntityFrameworkCore.Tools , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.Design From Version 6.0.0-rc.1.21420.8 -> To Version 6.0.0-rc.1.21420.19 * Update dependencies from https://github.com/dotnet/efcore build 20210820.22 Microsoft.EntityFrameworkCore.Tools , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.Design From Version 6.0.0-rc.1.21420.8 -> To Version 6.0.0-rc.1.21420.22 * Update dependencies from https://github.com/dotnet/efcore build 20210820.30 Microsoft.EntityFrameworkCore.Tools , dotnet-ef , Microsoft.EntityFrameworkCore , Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.InMemory , Microsoft.EntityFrameworkCore.Relational , Microsoft.EntityFrameworkCore.Sqlite , Microsoft.EntityFrameworkCore.Design From Version 6.0.0-rc.1.21420.8 -> To Version 6.0.0-rc.1.21420.30 * Update dependencies from https://github.com/dotnet/runtime build 20210820.15 Microsoft.NETCore.Platforms , Microsoft.NETCore.BrowserDebugHost.Transport , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.Win32.SystemEvents , Microsoft.NET.Runtime.MonoAOTCompiler.Task , Microsoft.Internal.Runtime.AspNetCore.Transport , Microsoft.Extensions.Primitives , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.NET.Runtime.WebAssembly.Sdk , Microsoft.Extensions.Options , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Json , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Configuration , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging , Microsoft.Extensions.Http , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Hosting , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.NETCore.App.Runtime.AOT.win-x64.Cross.browser-wasm , Microsoft.NETCore.App.Ref , System.Windows.Extensions , System.Threading.Channels , System.Text.Json , System.Text.Encodings.Web , System.ServiceProcess.ServiceController , System.Drawing.Common , System.DirectoryServices.Protocols , System.Diagnostics.EventLog , System.Diagnostics.DiagnosticSource , System.IO.Pipelines , System.Security.Permissions , System.Security.Cryptography.Xml , System.Security.Cryptography.Pkcs , System.Runtime.CompilerServices.Unsafe , System.Resources.Extensions , System.Reflection.Metadata , System.Net.Http.WinHttpHandler , System.Net.Http.Json From Version 6.0.0-rc.1.21420.7 -> To Version 6.0.0-rc.1.21420.15 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> * Improve Minimal APIs support for request media types #35082 (#35230) (#35579) * add support for request media types * [release/6.0-rc1] Update dependencies from dotnet/efcore dotnet/runtime (#35573) Co-authored-by: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Chris R <Tratcher@outlook.com> Co-authored-by: Safia Abdalla <safia@microsoft.com> Co-authored-by: James Newton-King <james@newtonking.com> Co-authored-by: Mackinnon Buck <mackinnon.buck@gmail.com> Co-authored-by: Brennan <brecon@microsoft.com> Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: Rafiki Assumani <87031580+rafikiassumaniMSFT@users.noreply.github.com>
|
@rafikiassumani-msft How does |
|
Hi @rachna-lad. It looks like you just commented on a closed PR. The team will most probably miss it. If you'd like to bring something important up to their attention, consider filing a new issue and add enough details to build context. |
Improve Minimal APIs support for request media types
PR Description
Refactoring code to prepare for changes that are needed to enable accepts media types for Minimal APIs
Fixes #35082