From 09f575743105fc28432abdd0fa7a46e92c640015 Mon Sep 17 00:00:00 2001 From: Ben Hopkins Date: Sat, 5 Apr 2025 18:13:52 +0100 Subject: [PATCH 1/3] Updated the incorrect list bullets (#35154) --- .github/ISSUE_TEMPLATE/doc-request.md | 12 +- .../wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md | 22 +- aspnetcore/data/scaffold_RP.md | 33 +-- aspnetcore/diagnostics/mvc1000.md | 4 +- aspnetcore/fundamentals/apis.md | 12 +- aspnetcore/fundamentals/includes/apis6.md | 14 +- .../fundamentals/minimal-apis/security.md | 12 +- .../fundamentals/openapi/include-metadata.md | 7 +- .../portable-object-localization.md | 57 +++--- .../fundamentals/servers/yarp/config-files.md | 8 +- .../servers/yarp/config-filters.md | 11 +- .../servers/yarp/config-providers.md | 30 +-- .../servers/yarp/destination-resolvers.md | 16 +- .../servers/yarp/dests-health-checks.md | 35 ++-- .../servers/yarp/direct-forwarding.md | 20 +- .../servers/yarp/distributed-tracing.md | 4 +- .../servers/yarp/header-routing.md | 11 +- .../servers/yarp/http-client-config.md | 24 ++- aspnetcore/fundamentals/servers/yarp/http3.md | 5 +- .../servers/yarp/load-balancing.md | 10 +- .../servers/yarp/queryparameter-routing.md | 11 +- .../servers/yarp/session-affinity.md | 5 +- .../servers/yarp/transforms-request.md | 9 +- .../fundamentals/servers/yarp/transforms.md | 11 +- .../host-and-deploy/iis/hosting-bundle.md | 4 +- .../metrics/built-in/includes/built-in10.md | 52 ++--- .../metrics/built-in/includes/built-in8.md | 53 +++-- aspnetcore/migration/inc/overview.md | 8 +- aspnetcore/migration/inc/remote-session.md | 4 +- aspnetcore/migration/inc/session.md | 16 +- aspnetcore/migration/inc/usage_guidance.md | 4 +- .../migration/proper-to-2x/includes/index5.md | 17 +- aspnetcore/mobile/native-mobile-backend.md | 6 +- .../mvc/advanced/custom-model-binding.md | 24 +-- .../samples/TagHelpersBuiltIn/README.md | 22 +- aspnetcore/performance/ObjectPool.md | 10 +- .../ObjectPool/includes/ObjectPool1-5.md | 10 +- .../ObjectPool/includes/ObjectPool6.md | 10 +- aspnetcore/performance/caching/hybrid.md | 4 +- aspnetcore/performance/diagnostic-tools.md | 26 +-- aspnetcore/performance/rate-limit.md | 31 +-- aspnetcore/release-notes/aspnetcore-1.1.md | 24 +-- aspnetcore/release-notes/aspnetcore-10.0.md | 20 +- .../includes/OpenApiNetV2Prev7.md | 4 +- .../aspnetcore-10/includes/openApi.md | 8 +- .../includes/testAppsTopLevel.md | 4 +- .../aspnetcore-9/includes/debugger.md | 14 +- .../improved-kestrel-connection-metrics.md | 14 +- .../aspnetcore-9/includes/openApi.md | 4 +- .../wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md | 22 +- .../security/authentication/azure-ad-b2c.md | 42 ++-- .../configure-jwt-bearer-authentication.md | 4 +- aspnetcore/signalr/hubcontext.md | 10 +- aspnetcore/signalr/swift-client.md | 6 +- aspnetcore/web-api/http-repl/index.md | 12 +- .../whats-new/dotnet-AspNetCore.Docs-mod0.md | 180 ++++++++-------- .../whats-new/dotnet-AspNetCore.Docs-mod1.md | 160 +++++++-------- .../whats-new/dotnet-AspNetCore.Docs-mod2.md | 168 +++++++-------- .../whats-new/dotnet-AspNetCore.Docs-mod3.md | 192 +++++++++--------- .../whats-new/dotnet-AspNetCore.Docs-mod4.md | 114 +++++------ .../whats-new/dotnet-AspNetCore.Docs-mod5.md | 130 ++++++------ 61 files changed, 921 insertions(+), 895 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/doc-request.md b/.github/ISSUE_TEMPLATE/doc-request.md index 7c06f125d41c..e35705a98d98 100644 --- a/.github/ISSUE_TEMPLATE/doc-request.md +++ b/.github/ISSUE_TEMPLATE/doc-request.md @@ -5,12 +5,12 @@ about: Request a new topic to help us improve **Help us make content visible** -- Tell us what search terms you used and how you searched docs. -- Tell us what docs you found that didn't address your concern. +* Tell us what search terms you used and how you searched docs. +* Tell us what docs you found that didn't address your concern. **Describe the new topic** -- Explain why this topic is needed. -- Suggest a location in the Table of Contents. -- Write an abstract. In one **short** paragraph, describe what this topic will cover. -- Create an outline for the new topic. We'll help review the outline and approve it before anyone writes a topic. +* Explain why this topic is needed. +* Suggest a location in the Table of Contents. +* Write an abstract. In one **short** paragraph, describe what this topic will cover. +* Create an outline for the new topic. We'll help review the outline and approve it before anyone writes a topic. diff --git a/aspnetcore/data/ef-rp/intro/samples/cu/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md b/aspnetcore/data/ef-rp/intro/samples/cu/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md index 66c3a2bb21a1..b51771ee9590 100644 --- a/aspnetcore/data/ef-rp/intro/samples/cu/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md +++ b/aspnetcore/data/ef-rp/intro/samples/cu/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md @@ -1,22 +1,22 @@ Before opening an issue: -- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) -- [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems -- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs -- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) +* [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) +* [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems +* Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs +* Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) When asking general "how to" questions: -- Please do not open an issue here -- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) +* Please do not open an issue here +* Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) When reporting a bug, include: -- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) -- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) -- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com) +* Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) +* Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) +* Reduced test cases and potential fixes using [JS Bin](https://jsbin.com) When suggesting a feature, include: -- As much detail as possible for what we should add and why it's important to Bootstrap -- Relevant links to prior art, screenshots, or live demos whenever possible +* As much detail as possible for what we should add and why it's important to Bootstrap +* Relevant links to prior art, screenshots, or live demos whenever possible diff --git a/aspnetcore/data/scaffold_RP.md b/aspnetcore/data/scaffold_RP.md index fc573631d74a..4db83f24d910 100644 --- a/aspnetcore/data/scaffold_RP.md +++ b/aspnetcore/data/scaffold_RP.md @@ -33,9 +33,9 @@ To launch the interactive tool, run `dotnet scaffold`. The UI changes as more fe To navigate the UI, use the: -- Up and down arrow keys to navigate the menu items. -- Enter key to select the highlighted menu item. -- Select and enter **Back** to return to the previous menu. +* Up and down arrow keys to navigate the menu items. +* Enter key to select the highlighted menu item. +* Select and enter **Back** to return to the previous menu. ## Create and scaffold a data model in a Razor Pages project @@ -59,11 +59,11 @@ If you have any problems with the following steps, see [Tutorial: Create a Razor The `dotnet scaffold` tool makes the following changes to the project files: -- A package reference is added for Entity Framework. -- `Program.cs` is updated to initialize the database connection. -- `appsettings.json` is updated with connection information. -- `ContactDbContext.cs` is created and added to the project root directory. -- Razor Pages for CRUD operations are added to the Pages folder. +* A package reference is added for Entity Framework. +* `Program.cs` is updated to initialize the database connection. +* `appsettings.json` is updated with connection information. +* `ContactDbContext.cs` is created and added to the project root directory. +* Razor Pages for CRUD operations are added to the Pages folder. The content has been generated but the database isn't initialized. Run the following commands to initialize the DB. @@ -75,10 +75,11 @@ dotnet ef database update ``` In The preceding commands: -- `dotnet tool uninstall --global dotnet-ef` uninstalls the `dotnet-ef` tool. Uninstalling ensures the latest tool is successfully installed. If `dotnet-ef` isn't installed, an error messages **A tool with the package Id 'dotnet-ef' could not be found.** You can ignore this message. -- `dotnet tool install --global dotnet-ef` installs globally the `dotnet-ef` tool. -- `dotnet ef migrations add initialMigration` adds the initial migration. For more information, see [Create the initial database schema using EF's migration feature](/aspnet/core/tutorials/razor-pages/model&tabs=visual-studio-code) -- `dotnet ef database update` applies the migrations to the database. + +* `dotnet tool uninstall --global dotnet-ef` uninstalls the `dotnet-ef` tool. Uninstalling ensures the latest tool is successfully installed. If `dotnet-ef` isn't installed, an error messages **A tool with the package Id 'dotnet-ef' could not be found.** You can ignore this message. +* `dotnet tool install --global dotnet-ef` installs globally the `dotnet-ef` tool. +* `dotnet ef migrations add initialMigration` adds the initial migration. For more information, see [Create the initial database schema using EF's migration feature](/aspnet/core/tutorials/razor-pages/model&tabs=visual-studio-code) +* `dotnet ef database update` applies the migrations to the database. Run the app: @@ -91,7 +92,7 @@ Run the app: ## Additional resources -- [dotnet scaffold repo on GitHub](https://github.com/dotnet/Scaffolding) -- [How to manage .NET tools](/dotnet/core/tools/global-tools) -- [Microsoft.dotnet-scaffold](https://www.nuget.org/packages/Microsoft.dotnet-scaffold) NuGet package. -- [Detailed tutorial on EF scaffolding Razor Pages](/aspnet/core/data/scaffold_rp) +* [dotnet scaffold repo on GitHub](https://github.com/dotnet/Scaffolding) +* [How to manage .NET tools](/dotnet/core/tools/global-tools) +* [Microsoft.dotnet-scaffold](https://www.nuget.org/packages/Microsoft.dotnet-scaffold) NuGet package. +* [Detailed tutorial on EF scaffolding Razor Pages](/aspnet/core/data/scaffold_rp) diff --git a/aspnetcore/diagnostics/mvc1000.md b/aspnetcore/diagnostics/mvc1000.md index c40082e07be6..4b606591549c 100644 --- a/aspnetcore/diagnostics/mvc1000.md +++ b/aspnetcore/diagnostics/mvc1000.md @@ -24,8 +24,8 @@ Rendering a partial using `IHtmlHelper.Partial` or `IHtmlHelper.RenderPartial` e ## How to fix violations -- Use the -- Use the or +* Use the +* Use the or ## When to suppress warnings diff --git a/aspnetcore/fundamentals/apis.md b/aspnetcore/fundamentals/apis.md index 985978a2aabf..5467bc507e70 100644 --- a/aspnetcore/fundamentals/apis.md +++ b/aspnetcore/fundamentals/apis.md @@ -34,12 +34,12 @@ Both API projects refer to the following class: Minimal APIs have many of the same capabilities as controller-based APIs. They support the configuration and customization needed to scale to multiple APIs, handle complex routes, apply authorization rules, and control the content of API responses. There are a few capabilities available with controller-based APIs that are not yet supported or implemented by minimal APIs. These include: -- No built-in support for model binding (, ). Support can be added with a custom binding shim. -- No built-in support for validation (). -- No support for [application parts](xref:mvc/extensibility/app-parts) or the [application model](xref:mvc/controllers/application-model). There's no way to apply or build your own conventions. -- No built-in view rendering support. We recommend using [Razor Pages](xref:tutorials/razor-pages/razor-pages-start) for rendering views. -- No support for [JsonPatch](https://www.nuget.org/packages/Microsoft.AspNetCore.JsonPatch/) -- No support for [OData](https://www.nuget.org/packages/Microsoft.AspNetCore.OData/) +* No built-in support for model binding (, ). Support can be added with a custom binding shim. +* No built-in support for validation (). +* No support for [application parts](xref:mvc/extensibility/app-parts) or the [application model](xref:mvc/controllers/application-model). There's no way to apply or build your own conventions. +* No built-in view rendering support. We recommend using [Razor Pages](xref:tutorials/razor-pages/razor-pages-start) for rendering views. +* No support for [JsonPatch](https://www.nuget.org/packages/Microsoft.AspNetCore.JsonPatch/) +* No support for [OData](https://www.nuget.org/packages/Microsoft.AspNetCore.OData/) ## See also diff --git a/aspnetcore/fundamentals/includes/apis6.md b/aspnetcore/fundamentals/includes/apis6.md index 9d6ed269c47e..910d829f4e73 100644 --- a/aspnetcore/fundamentals/includes/apis6.md +++ b/aspnetcore/fundamentals/includes/apis6.md @@ -20,13 +20,13 @@ Both API projects refer to the following class: Minimal APIs have many of the same capabilities as controller-based APIs. They support the configuration and customization needed to scale to multiple APIs, handle complex routes, apply authorization rules, and control the content of API responses. There are a few capabilities available with controller-based APIs that are not yet supported or implemented by minimal APIs. These include: -- No built-in support for model binding (, ). Support can be added with a custom binding shim. -- No support for binding from forms. This includes binding . -- No built-in support for validation (). -- No support for [application parts](xref:mvc/extensibility/app-parts) or the [application model](xref:mvc/controllers/application-model). There's no way to apply or build your own conventions. -- No built-in view rendering support. We recommend using [Razor Pages](xref:tutorials/razor-pages/razor-pages-start) for rendering views. -- No support for [JsonPatch](https://www.nuget.org/packages/Microsoft.AspNetCore.JsonPatch/) -- No support for [OData](https://www.nuget.org/packages/Microsoft.AspNetCore.OData/) +* No built-in support for model binding (, ). Support can be added with a custom binding shim. +* No support for binding from forms. This includes binding . +* No built-in support for validation (). +* No support for [application parts](xref:mvc/extensibility/app-parts) or the [application model](xref:mvc/controllers/application-model). There's no way to apply or build your own conventions. +* No built-in view rendering support. We recommend using [Razor Pages](xref:tutorials/razor-pages/razor-pages-start) for rendering views. +* No support for [JsonPatch](https://www.nuget.org/packages/Microsoft.AspNetCore.JsonPatch/) +* No support for [OData](https://www.nuget.org/packages/Microsoft.AspNetCore.OData/) ## See also diff --git a/aspnetcore/fundamentals/minimal-apis/security.md b/aspnetcore/fundamentals/minimal-apis/security.md index 1ffb3516079e..91758ec4b674 100644 --- a/aspnetcore/fundamentals/minimal-apis/security.md +++ b/aspnetcore/fundamentals/minimal-apis/security.md @@ -51,8 +51,8 @@ In some cases, such as controlling middleware order, it's necessary to explicitl Authentication strategies typically support a variety of configurations that are loaded via options. Minimal apps support loading options from configuration for the following authentication strategies: -- [JWT bearer-based](https://jwt.io/introduction) -- [OpenID Connection-based](https://openid.net/developers/how-connect-works/) +* [JWT bearer-based](https://jwt.io/introduction) +* [OpenID Connection-based](https://openid.net/developers/how-connect-works/) The ASP.NET Core framework expects to find these options under the `Authentication:Schemes:{SchemeName}` section in [configuration](/aspnet/core/fundamentals/configuration). In the following sample, two different schemes, `Bearer` and `LocalAuthIssuer`, are defined with their respective options. The `Authentication:DefaultScheme` option can be used to configure the default authentication strategy that's used. @@ -102,13 +102,13 @@ Configuring authorization requirements on a resource is a two-step process that In the following code, is invoked which: -- Adds authorization-related services to the DI container. -- Returns an that can be used to directly register authorization policies. +* Adds authorization-related services to the DI container. +* Returns an that can be used to directly register authorization policies. The code creates a new authorization policy, named `admin_greetings`, that encapsulates two authorization requirements: -- A role-based requirement via for users with an `admin` role. -- A claim-based requirement via that the user must provide a `greetings_api` scope claim. +* A role-based requirement via for users with an `admin` role. +* A claim-based requirement via that the user must provide a `greetings_api` scope claim. The `admin_greetings` policy is provided as a required policy to the `/hello` endpoint. diff --git a/aspnetcore/fundamentals/openapi/include-metadata.md b/aspnetcore/fundamentals/openapi/include-metadata.md index 0f33b4a1a708..197718f5835f 100644 --- a/aspnetcore/fundamentals/openapi/include-metadata.md +++ b/aspnetcore/fundamentals/openapi/include-metadata.md @@ -516,9 +516,10 @@ public record Todo( In a class, struct, or record, properties with the [`[Required]`](xref:System.ComponentModel.DataAnnotations.RequiredAttribute) attribute or [required](/dotnet/csharp/language-reference/proposals/csharp-11.0/required-members#required-modifier) modifier are always `required` in the corresponding schema. Other properties may also be required based on the constructors (implicit and explicit) for the class, struct, or record. -- For a class or record class with a single public constructor, any property with the same type and name (case-insensitive match) as a parameter to the constructor is required in the corresponding schema. -- For a class or record class with multiple public constructors, no other properties are required. -- For a struct or record struct, no other properties are required since C# always defines an implicit parameterless constructor for a struct. + +* For a class or record class with a single public constructor, any property with the same type and name (case-insensitive match) as a parameter to the constructor is required in the corresponding schema. +* For a class or record class with multiple public constructors, no other properties are required. +* For a struct or record struct, no other properties are required since C# always defines an implicit parameterless constructor for a struct. #### enum diff --git a/aspnetcore/fundamentals/portable-object-localization.md b/aspnetcore/fundamentals/portable-object-localization.md index 6cccb4964fa3..a45a3a48b33a 100644 --- a/aspnetcore/fundamentals/portable-object-localization.md +++ b/aspnetcore/fundamentals/portable-object-localization.md @@ -21,9 +21,10 @@ This article walks through the steps for using Portable Object (PO) files in an ## What is a PO file? PO files are distributed as text files containing the translated strings for a given language. Some advantages of using PO files instead of *.resx* files include: -- PO files support pluralization; *.resx* files don't support pluralization. -- PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. -- PO files work well with collaborative online editing tools. + +* PO files support pluralization; *.resx* files don't support pluralization. +* PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. +* PO files work well with collaborative online editing tools. ### Example @@ -44,15 +45,15 @@ msgstr[1] "Il y a {0} éléments." This example uses the following syntax: -- `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. -- `msgid`: The untranslated string. -- `msgstr`: The translated string. +* `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. +* `msgid`: The untranslated string. +* `msgstr`: The translated string. For pluralization support, more entries can be defined. -- `msgid_plural`: The untranslated plural string. -- `msgstr[0]`: The translated string for the case 0. -- `msgstr[N]`: The translated string for the case N. +* `msgid_plural`: The untranslated plural string. +* `msgstr[0]`: The translated string for the case 0. +* `msgstr[N]`: The translated string for the case N. The PO file specification can be found [here](https://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/PO-Files.html). @@ -236,9 +237,10 @@ This article walks through the steps for using Portable Object (PO) files in an ## What is a PO file? PO files are distributed as text files containing the translated strings for a given language. Some advantages of using PO files instead of *.resx* files include: -- PO files support pluralization; *.resx* files don't support pluralization. -- PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. -- PO files work well with collaborative online editing tools. + +* PO files support pluralization; *.resx* files don't support pluralization. +* PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. +* PO files work well with collaborative online editing tools. ### Example @@ -259,15 +261,15 @@ msgstr[1] "Il y a {0} éléments." This example uses the following syntax: -- `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. -- `msgid`: The untranslated string. -- `msgstr`: The translated string. +* `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. +* `msgid`: The untranslated string. +* `msgstr`: The translated string. In the case of pluralization support, more entries can be defined. -- `msgid_plural`: The untranslated plural string. -- `msgstr[0]`: The translated string for the case 0. -- `msgstr[N]`: The translated string for the case N. +* `msgid_plural`: The untranslated plural string. +* `msgstr[0]`: The translated string for the case 0. +* `msgstr[N]`: The translated string for the case N. The PO file specification can be found [here](https://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/PO-Files.html). @@ -447,9 +449,10 @@ This article walks through the steps for using Portable Object (PO) files in an ## What is a PO file? PO files are distributed as text files containing the translated strings for a given language. Some advantages of using PO files instead of *.resx* files include: -- PO files support pluralization; *.resx* files don't support pluralization. -- PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. -- PO files work well with collaborative online editing tools. + +* PO files support pluralization; *.resx* files don't support pluralization. +* PO files aren't compiled like *.resx* files. As such, specialized tooling and build steps aren't required. +* PO files work well with collaborative online editing tools. ### Example @@ -471,15 +474,15 @@ msgstr[1] "Les adresses email sont \"{0}\"" This example uses the following syntax: -- `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. -- `msgid`: The untranslated string. -- `msgstr`: The translated string. +* `#:`: A comment indicating the context of the string to be translated. The same string might be translated differently depending on where it's being used. +* `msgid`: The untranslated string. +* `msgstr`: The translated string. In the case of pluralization support, more entries can be defined. -- `msgid_plural`: The untranslated plural string. -- `msgstr[0]`: The translated string for the case 0. -- `msgstr[N]`: The translated string for the case N. +* `msgid_plural`: The untranslated plural string. +* `msgstr[0]`: The translated string for the case 0. +* `msgstr[N]`: The translated string for the case N. The PO file specification can be found [here](https://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/PO-Files.html). diff --git a/aspnetcore/fundamentals/servers/yarp/config-files.md b/aspnetcore/fundamentals/servers/yarp/config-files.md index 41b4e45150e9..25c76e087e55 100644 --- a/aspnetcore/fundamentals/servers/yarp/config-files.md +++ b/aspnetcore/fundamentals/servers/yarp/config-files.md @@ -90,9 +90,11 @@ Example: ### Routes The routes section is an unordered collection of route matches and their associated configuration. A route requires at least the following fields: -- RouteId - a unique name -- ClusterId - refers to the name of an entry in the clusters section. -- Match - contains either a Hosts array or a Path pattern string. Path is an ASP.NET Core route template that can be defined as [explained here](/aspnet/core/fundamentals/routing#route-templates). + +* RouteId - a unique name +* ClusterId - refers to the name of an entry in the clusters section. +* Match - contains either a Hosts array or a Path pattern string. Path is an ASP.NET Core route template that can be defined as [explained here](/aspnet/core/fundamentals/routing#route-templates). + Route matching is based on the most specific routes having highest precedence as described [here](/aspnet/core/fundamentals/routing#url-matching). Explicit ordering can be achieved using the `order` field, with lower values taking higher priority. [Headers](xref:fundamentals/servers/yarp/header-routing), [Authorization](xref:fundamentals/servers/yarp/authn-authz), [CORS](xref:fundamentals/servers/yarp/cors), and other route based policies can be configured on each route entry. For additional fields see [RouteConfig](xref:Yarp.ReverseProxy.Configuration.RouteConfig). diff --git a/aspnetcore/fundamentals/servers/yarp/config-filters.md b/aspnetcore/fundamentals/servers/yarp/config-filters.md index b6835a4a1f9f..84bf5d98e1c4 100644 --- a/aspnetcore/fundamentals/servers/yarp/config-filters.md +++ b/aspnetcore/fundamentals/servers/yarp/config-filters.md @@ -16,11 +16,12 @@ ai-usage: ai-assisted YARP configuration for routes, clusters, and destinations can be loaded from [configuration files](xref:fundamentals/servers/yarp/config-files) or from [configuration providers](xref:fundamentals/servers/yarp/config-providers). Configuration filters can be used to modify that raw input before it's validated and applied. Filters can be used for a variety of purposes such as: -- Supplementing config fields with data from other sources like the deployment environment -- Applying system defaults -- Applying common settings and enforce policies -- Substituting placeholder values -- Normalization and error correction + +* Supplementing config fields with data from other sources like the deployment environment +* Applying system defaults +* Applying common settings and enforce policies +* Substituting placeholder values +* Normalization and error correction ## AddConfigFilter Configuration filters are registered in the Dependency Injection system using the [AddConfigFilter](xref:Microsoft.Extensions.DependencyInjection.ReverseProxyServiceCollectionExtensions) API. Any number of unique filters can be added and will be applied in the order added. diff --git a/aspnetcore/fundamentals/servers/yarp/config-providers.md b/aspnetcore/fundamentals/servers/yarp/config-providers.md index e92e47a8962f..cd2a5b872e16 100644 --- a/aspnetcore/fundamentals/servers/yarp/config-providers.md +++ b/aspnetcore/fundamentals/servers/yarp/config-providers.md @@ -24,9 +24,10 @@ Configuration can be modified during the load sequence using [Configuration Filt ### Routes The routes section is an unordered collection of named routes. A route contains matches and their associated configuration. A route requires at least the following fields: -- RouteId - a unique name -- ClusterId - refers to the name of an entry in the clusters section. -- Match - contains either a Hosts array or a Path pattern string. Path is an ASP.NET Core route template that can be defined as [explained here](/aspnet/core/fundamentals/routing#route-templates). + +* RouteId - a unique name +* ClusterId - refers to the name of an entry in the clusters section. +* Match - contains either a Hosts array or a Path pattern string. Path is an ASP.NET Core route template that can be defined as [explained here](/aspnet/core/fundamentals/routing#route-templates). [Headers](xref:fundamentals/servers/yarp/header-routing), [Authorization](xref:fundamentals/servers/yarp/authn-authz), [CORS](xref:fundamentals/servers/yarp/cors), and other route based policies can be configured on each route entry. For additional fields see [RouteConfig](xref:Yarp.ReverseProxy.Configuration.RouteConfig). @@ -55,9 +56,10 @@ httpContext.RequestServices.GetRequiredService().Update( ### Startup The `IProxyConfigProvider` should be registered in the DI container as a singleton. At startup, the proxy will resolve this instance and call `GetConfig()`. On this first call the provider may choose to: -- Throw an exception if the provider cannot produce a valid proxy configuration for any reason. This will prevent the application from starting. -- Synchronously block while it loads the configuration. This will block the application from starting until valid route data is available. -- Or, it may choose to return an empty `IProxyConfig` instance while it loads the configuration in the background. The provider will need to trigger the `IChangeToken` when the configuration is available. + +* Throw an exception if the provider cannot produce a valid proxy configuration for any reason. This will prevent the application from starting. +* Synchronously block while it loads the configuration. This will block the application from starting until valid route data is available. +* Or, it may choose to return an empty `IProxyConfig` instance while it loads the configuration in the background. The provider will need to trigger the `IChangeToken` when the configuration is available. The proxy will validate the given configuration and if it's invalid, an exception will be thrown that prevents the application from starting. The provider can avoid this by using the [IConfigValidator](xref:Yarp.ReverseProxy.Configuration.IConfigValidator) to pre-validate routes and clusters and take whatever action it deems appropriate such as excluding invalid entries. @@ -68,15 +70,17 @@ The configuration objects and collections supplied to the proxy should be read-o If the `IChangeToken` supports `ActiveChangeCallbacks`, once the proxy has processed the initial set of configurations it will register a callback with this token. If the provider does not support callbacks then `HasChanged` will be polled every 5 minutes. When the provider wants to provide a new configuration to the proxy it should: -- Load that configuration in the background. - - Route and cluster objects are immutable, so new instances have to be created for any new data. - - Objects for unchanged routes and clusters can be re-used, or new instances can be created - changes will be detected by diffing them. -- Optionally validate the configuration using the [IConfigValidator](xref:Yarp.ReverseProxy.Configuration.IConfigValidator), and only then signal the `IChangeToken` from the prior `IProxyConfig` instance that new data is available. The proxy will call `GetConfig()` again to retrieve the new data. + +* Load that configuration in the background. + * Route and cluster objects are immutable, so new instances have to be created for any new data. + * Objects for unchanged routes and clusters can be re-used, or new instances can be created - changes will be detected by diffing them. +* Optionally validate the configuration using the [IConfigValidator](xref:Yarp.ReverseProxy.Configuration.IConfigValidator), and only then signal the `IChangeToken` from the prior `IProxyConfig` instance that new data is available. The proxy will call `GetConfig()` again to retrieve the new data. There are important differences when reloading configuration vs the first configuration load. -- The new configuration will be diffed against the current one and only modified routes or clusters will be updated. The update will be applied atomically and will only affect new requests, not requests currently in progress. -- Any errors in the reload process will be logged and suppressed. The application will continue using the last known good configuration. -- If `GetConfig()` throws the proxy will be unable to listen for future changes because `IChangeToken`s are single-use. + +* The new configuration will be diffed against the current one and only modified routes or clusters will be updated. The update will be applied atomically and will only affect new requests, not requests currently in progress. +* Any errors in the reload process will be logged and suppressed. The application will continue using the last known good configuration. +* If `GetConfig()` throws the proxy will be unable to listen for future changes because `IChangeToken`s are single-use. Once the new configuration has been validated and applied, the proxy will register a callback with the new `IChangeToken`. Note if there are multiple reloads signaled in close succession, the proxy may skip some and load the next available configuration as soon as it's ready. Each `IProxyConfig` contains the full configuration state so nothing will be lost. diff --git a/aspnetcore/fundamentals/servers/yarp/destination-resolvers.md b/aspnetcore/fundamentals/servers/yarp/destination-resolvers.md index 9db41e67e9bc..1b00b1b797ed 100644 --- a/aspnetcore/fundamentals/servers/yarp/destination-resolvers.md +++ b/aspnetcore/fundamentals/servers/yarp/destination-resolvers.md @@ -26,9 +26,10 @@ YARP uses a destination resolver to expand the set of configured destination add ### Startup The `IDestinationResolver` should be registered in the DI container as a singleton. At startup, the proxy will resolve this instance and call `ResolveDestinationsAsync(...)` with the configured destinations retrieved from the resolved `IProxyConfigProviders`. On this first call the provider may choose to: -- Throw an exception if the provider cannot produce a valid proxy configuration for any reason. This will prevent the application from starting. -- Asynchronously resolve the destinations. This will stop the application from starting until resolved destinations are available. -- Or, it may choose to return an empty `ResolvedDestinationCollection` instance while it resolves destinations in the background. The provider will need to trigger the `IChangeToken` when the configuration is available. + +* Throw an exception if the provider cannot produce a valid proxy configuration for any reason. This will prevent the application from starting. +* Asynchronously resolve the destinations. This will stop the application from starting until resolved destinations are available. +* Or, it may choose to return an empty `ResolvedDestinationCollection` instance while it resolves destinations in the background. The provider will need to trigger the `IChangeToken` when the configuration is available. ### Atomicity The destinations objects and collections supplied to the proxy should be read-only and not modified once they have been handed to the proxy via `GetConfig()`. @@ -37,10 +38,11 @@ The destinations objects and collections supplied to the proxy should be read-on If the `IChangeToken` supports `ActiveChangeCallbacks`, once the proxy has processed the initial set of destinations it will register a callback with this token. If the provider does not support callbacks then `HasChanged` will be polled alongside `IProxyConfig` change tokens, every 5 minutes. When the provider wants to provide a new set of destinations to the proxy it should: -- Resolve those destinations in the background. - - `ResolvedDestinationCollection` is immutable, so new instances have to be created for any new data. - - Objects for unchanged destinations can be re-used, or new instances can be created. -- Invalidate the `IChangeToken` returned from the previous `ResolveDestinationsAsync` invocation. + +* Resolve those destinations in the background. + * `ResolvedDestinationCollection` is immutable, so new instances have to be created for any new data. + * Objects for unchanged destinations can be re-used, or new instances can be created. +* Invalidate the `IChangeToken` returned from the previous `ResolveDestinationsAsync` invocation. Once the new destinations have been applied, the proxy will register a callback with the new `IChangeToken`. Note if there are multiple reloads signaled in close succession, the proxy may skip some and resolve destinations as soon as it's ready. diff --git a/aspnetcore/fundamentals/servers/yarp/dests-health-checks.md b/aspnetcore/fundamentals/servers/yarp/dests-health-checks.md index 391fdc0a06f0..6935ee0e278e 100644 --- a/aspnetcore/fundamentals/servers/yarp/dests-health-checks.md +++ b/aspnetcore/fundamentals/servers/yarp/dests-health-checks.md @@ -84,18 +84,19 @@ Active health check settings can also be defined in code via the corresponding t `Cluster/HealthCheck/Active` section and [ActiveHealthCheckConfig](xref:Yarp.ReverseProxy.Configuration.ActiveHealthCheckConfig): -- `Enabled`: Flag indicating whether active health check is enabled for a cluster. Default `false` -- `Interval`: Period of sending health probing requests. Default `00:00:15` -- `Timeout`: Probing request timeout. Default `00:00:10` -- `Policy`: Name of a policy evaluating destinations' active health states. Mandatory parameter -- `Path`: Health check path on all cluster's destinations. Default `null`. -- `Query`: Health check query on all cluster's destinations. Default `null`. +* `Enabled`: Flag indicating whether active health check is enabled for a cluster. Default `false` +* `Interval`: Period of sending health probing requests. Default `00:00:15` +* `Timeout`: Probing request timeout. Default `00:00:10` +* `Policy`: Name of a policy evaluating destinations' active health states. Mandatory parameter +* `Path`: Health check path on all cluster's destinations. Default `null`. +* `Query`: Health check query on all cluster's destinations. Default `null`. `Destination` section and [DestinationConfig](xref:Yarp.ReverseProxy.Configuration.DestinationConfig). -- `Health` - A dedicated health probing endpoint such as `http://destination:12345/`. Defaults `null` and falls back to `Destination/Address`. +`Health`: A dedicated health probing endpoint such as `http://destination:12345/`. Defaults `null` and falls back to `Destination/Address`. ### Built-in policies + There is currently one built-in active health check policy - `ConsecutiveFailuresHealthPolicy`. It counts consecutive health probe failures and marks a destination as unhealthy once the given threshold is reached. On the first successful response, a destination is marked as healthy and the counter is reset. The policy parameters are set in the cluster's metadata as follows: @@ -264,9 +265,9 @@ endpoints.MapReverseProxy(proxyPipeline => `Cluster/HealthCheck/Passive` section and [PassiveHealthCheckConfig](xref:Yarp.ReverseProxy.Configuration.PassiveHealthCheckConfig): -- `Enabled` - flag indicating whether passive health check is enabled for a cluster. Default `false` -- `Policy` - name of a policy evaluating destinations' passive health states. Mandatory parameter -- `ReactivationPeriod` - period after which an unhealthy destination's passive health state is reset to `Unknown` and it starts receiving traffic again. Default value is `null` which means the period will be set by a `IPassiveHealthCheckPolicy` +* `Enabled` - flag indicating whether passive health check is enabled for a cluster. Default `false` +* `Policy` - name of a policy evaluating destinations' passive health states. Mandatory parameter +* `ReactivationPeriod` - period after which an unhealthy destination's passive health state is reset to `Unknown` and it starts receiving traffic again. Default value is `null` which means the period will be set by a `IPassiveHealthCheckPolicy` ### Built-in policies There is currently one built-in passive health check policy - [`TransportFailureRateHealthPolicy`](xref:Yarp.ReverseProxy.Health.TransportFailureRateHealthPolicyOptions). It calculates the proxied requests failure rate for each destination and marks it as unhealthy if the specified limit is exceeded. Rate is calculated as a percentage of failed requests to the total number of request proxied to a destination in the given period of time. Failed and total counters are tracked in a sliding time window which means that only the recent readings fitting in the window are taken into account. @@ -274,9 +275,9 @@ There are two sets of policy parameters defined globally and on per cluster leve Global parameters are set via the options mechanism using `TransportFailureRateHealthPolicyOptions` type with the following properties: -- `DetectionWindowSize` - period of time while detected failures are kept and taken into account in the rate calculation. Default is `00:01:00`. -- `MinimalTotalCountThreshold` - minimal total number of requests which must be proxied to a destination within the detection window before this policy starts evaluating the destination's health and enforcing the failure rate limit. Default is `10`. -- `DefaultFailureRateLimit` - default failure rate limit for a destination to be marked as unhealthy that is applied if it's not set on a cluster's metadata. The value is in range `(0,1)`. Default is `0.3` (30%). +* `DetectionWindowSize` - period of time while detected failures are kept and taken into account in the rate calculation. Default is `00:01:00`. +* `MinimalTotalCountThreshold` - minimal total number of requests which must be proxied to a destination within the detection window before this policy starts evaluating the destination's health and enforcing the failure rate limit. Default is `10`. +* `DefaultFailureRateLimit` - default failure rate limit for a destination to be marked as unhealthy that is applied if it's not set on a cluster's metadata. The value is in range `(0,1)`. Default is `0.3` (30%). Global policy options can be set in code as follows: ```csharp @@ -346,10 +347,10 @@ public class FirstUnsuccessfulResponseHealthPolicy : IPassiveHealthCheckPolicy ## Available destination collection Destinations health state is used to determine which of them are eligible for receiving proxied requests. Each cluster maintains its own list of available destinations on `AvailableDestinations` property of the [ClusterDestinationState](xref:Yarp.ReverseProxy.Model.ClusterDestinationsState) type. That list gets rebuilt when any destination's health state changes. The [IClusterDestinationsUpdater](xref:Yarp.ReverseProxy.Health.IClusterDestinationsUpdater) controls that process and calls an [IAvailableDestinationsPolicy](xref:Yarp.ReverseProxy.Health.IAvailableDestinationsPolicy) configured on the cluster to actually choose the available destinations from the all cluster's destinations. There are the following built-in policies provided and custom ones can be implemented if necessary. -- `HealthyAndUnknown` - Inspects each `DestinationState` and adds it on the available destination list if all of the following statements are TRUE. If no destinations are available then requests will get a 503 error. - - Active health checks are disabled on the cluster OR `DestinationHealthState.Active != DestinationHealth.Unhealthy` - - Passive health checks are disabled on the cluster OR `DestinationHealthState.Passive != DestinationHealth.Unhealthy` -- `HealthyOrPanic` - Calls `HealthyAndUnknown` policy at first to get the available destinations. If none of them are returned from this call, it marks all cluster's destinations as available. This is the default policy. +* `HealthyAndUnknown` - Inspects each `DestinationState` and adds it on the available destination list if all of the following statements are TRUE. If no destinations are available then requests will get a 503 error. + * Active health checks are disabled on the cluster OR `DestinationHealthState.Active != DestinationHealth.Unhealthy` + * Passive health checks are disabled on the cluster OR `DestinationHealthState.Passive != DestinationHealth.Unhealthy` +* `HealthyOrPanic` - Calls `HealthyAndUnknown` policy at first to get the available destinations. If none of them are returned from this call, it marks all cluster's destinations as available. This is the default policy. **NOTE**: An available destination policy configured on a cluster will be always called regardless of if any health check is enabled on the given cluster. The health state of a disabled health check is set to `Unknown`. diff --git a/aspnetcore/fundamentals/servers/yarp/direct-forwarding.md b/aspnetcore/fundamentals/servers/yarp/direct-forwarding.md index 57fb549bbe73..35d245e20124 100644 --- a/aspnetcore/fundamentals/servers/yarp/direct-forwarding.md +++ b/aspnetcore/fundamentals/servers/yarp/direct-forwarding.md @@ -19,17 +19,19 @@ Some applications only need the ability to take a specific request and forward i [IHttpForwarder](xref:Yarp.ReverseProxy.Forwarder.IHttpForwarder) serves as the core proxy adapter between incoming AspNetCore and outgoing System.Net.Http requests. It handles the mechanics of creating a HttpRequestMessage from a HttpContext, sending it, and relaying the response. IHttpForwarder supports: -- Dynamic destination selection, you specify the destination for each request -- Http client customization, you provide the HttpMessageInvoker -- Request and response customization (except bodies) -- Streaming protocols like gRPC and WebSockets -- Error handling + +* Dynamic destination selection, you specify the destination for each request +* Http client customization, you provide the HttpMessageInvoker +* Request and response customization (except bodies) +* Streaming protocols like gRPC and WebSockets +* Error handling It does not include: -- Routing -- Load balancing -- Affinity -- Retries + +* Routing +* Load balancing +* Affinity +* Retries ## Example diff --git a/aspnetcore/fundamentals/servers/yarp/distributed-tracing.md b/aspnetcore/fundamentals/servers/yarp/distributed-tracing.md index 52667ce794bd..fa8d1dbe1c82 100644 --- a/aspnetcore/fundamentals/servers/yarp/distributed-tracing.md +++ b/aspnetcore/fundamentals/servers/yarp/distributed-tracing.md @@ -21,8 +21,8 @@ As an ASP.NET Core component, YARP can easily integrate into different tracing s YARP supports distributed tracing using Open Telemetry (OTEL). When a request comes in, and there is a listener for Activities, then ASP.NET Core will propagate the [Trace Context](https://www.w3.org/TR/trace-context) trace-id, or create one if necessary, and create new spans/activities for the work performed. In addition YARP can create activities for: -- Forwarding Requests -- Active health checks for clusters +* Forwarding Requests +* Active health checks for clusters These will only be created if there is a listener for the [`ActivitySource`](/dotnet/core/diagnostics/distributed-tracing-instrumentation-walkthroughs#activitysource) named `Yarp.ReverseProxy`. diff --git a/aspnetcore/fundamentals/servers/yarp/header-routing.md b/aspnetcore/fundamentals/servers/yarp/header-routing.md index 155dfe06d114..fbb57446aa36 100644 --- a/aspnetcore/fundamentals/servers/yarp/header-routing.md +++ b/aspnetcore/fundamentals/servers/yarp/header-routing.md @@ -290,11 +290,12 @@ A list of possible values to search for. The header must match at least one of t ### Mode [HeaderMatchMode](xref:Yarp.ReverseProxy.Configuration.HeaderMatchMode) specifies how to match the value(s) against the request header. The default is `ExactHeader`. -- ExactHeader - Any of the headers with the given name must match in its entirety, subject to the value of `IsCaseSensitive`. If a header contains multiple values (separated by `,` or `;`), they are split before matching. A single pair of quotes will also be stripped from the value before matching. -- HeaderPrefix - Any of the headers with the given name must match by prefix, subject to the value of `IsCaseSensitive`. If a header contains multiple values (separated by `,` or `;`), they are split before matching. A single pair of quotes will also be stripped from the value before matching. -- Exists - The header must exist and contain any non-empty value. If there are multiple headers with the same name, the rule will also match. -- Contains - Any of the headers with the given name must contain any of the match values, subject to the value of `IsCaseSensitive`. -- NotContains - None of the headers with the given name may contain any of the match values, subject to the value of `IsCaseSensitive`. + +* ExactHeader - Any of the headers with the given name must match in its entirety, subject to the value of `IsCaseSensitive`. If a header contains multiple values (separated by `,` or `;`), they are split before matching. A single pair of quotes will also be stripped from the value before matching. +* HeaderPrefix - Any of the headers with the given name must match by prefix, subject to the value of `IsCaseSensitive`. If a header contains multiple values (separated by `,` or `;`), they are split before matching. A single pair of quotes will also be stripped from the value before matching. +* Exists - The header must exist and contain any non-empty value. If there are multiple headers with the same name, the rule will also match. +* Contains - Any of the headers with the given name must contain any of the match values, subject to the value of `IsCaseSensitive`. +* NotContains - None of the headers with the given name may contain any of the match values, subject to the value of `IsCaseSensitive`. ### IsCaseSensitive diff --git a/aspnetcore/fundamentals/servers/yarp/http-client-config.md b/aspnetcore/fundamentals/servers/yarp/http-client-config.md index 1fcd85233801..d62d36b8369c 100644 --- a/aspnetcore/fundamentals/servers/yarp/http-client-config.md +++ b/aspnetcore/fundamentals/servers/yarp/http-client-config.md @@ -44,26 +44,27 @@ HTTP client configuration is based on [HttpClientConfig](xref:Yarp.ReverseProxy. ``` Configuration settings: -- SslProtocols - [SSL protocols](/dotnet/api/system.security.authentication.sslprotocols) enabled on the given HTTP client. Protocol names are specified as array of strings. Default value is [None](/dotnet/api/system.security.authentication.sslprotocols#System_Security_Authentication_SslProtocols_None). + +* SslProtocols - [SSL protocols](/dotnet/api/system.security.authentication.sslprotocols) enabled on the given HTTP client. Protocol names are specified as array of strings. Default value is [None](/dotnet/api/system.security.authentication.sslprotocols#System_Security_Authentication_SslProtocols_None). ```json "SslProtocols": [ "Tls11", "Tls12" ] ``` -- MaxConnectionsPerServer - maximal number of HTTP 1.1 connections open concurrently to the same server. Default value is [int32.MaxValue](/dotnet/api/system.int32.maxvalue). +* MaxConnectionsPerServer - maximal number of HTTP 1.1 connections open concurrently to the same server. Default value is [int32.MaxValue](/dotnet/api/system.int32.maxvalue). ```json "MaxConnectionsPerServer": "10" ``` -- DangerousAcceptAnyServerCertificate - indicates whether the server's SSL certificate validity is checked by the client. Setting it to `true` completely disables validation. Default value is `false`. +* DangerousAcceptAnyServerCertificate - indicates whether the server's SSL certificate validity is checked by the client. Setting it to `true` completely disables validation. Default value is `false`. ```json "DangerousAcceptAnyServerCertificate": "true" ``` -- RequestHeaderEncoding - enables other than ASCII encoding for outgoing request headers. Setting this value will leverage [`SocketsHttpHandler.RequestHeaderEncodingSelector`](/dotnet/api/system.net.http.socketshttphandler.requestheaderencodingselector) and use the selected encoding for all headers. The value is then parsed by [`Encoding.GetEncoding`](/dotnet/api/system.text.encoding.getencoding#System_Text_Encoding_GetEncoding_System_String_), use values like: "utf-8", "iso-8859-1", etc. +* RequestHeaderEncoding - enables other than ASCII encoding for outgoing request headers. Setting this value will leverage [`SocketsHttpHandler.RequestHeaderEncodingSelector`](/dotnet/api/system.net.http.socketshttphandler.requestheaderencodingselector) and use the selected encoding for all headers. The value is then parsed by [`Encoding.GetEncoding`](/dotnet/api/system.text.encoding.getencoding#System_Text_Encoding_GetEncoding_System_String_), use values like: "utf-8", "iso-8859-1", etc. ```json "RequestHeaderEncoding": "utf-8" ``` -- ResponseHeaderEncoding - enables other than ASCII encoding for incoming response headers (from requests that the proxy would forward out). Setting this value will leverage [`SocketsHttpHandler.ResponseHeaderEncodingSelector`](/dotnet/api/system.net.http.socketshttphandler.responseheaderencodingselector) and use the selected encoding for all headers. The value is then parsed by [`Encoding.GetEncoding`](/dotnet/api/system.text.encoding.getencoding#System_Text_Encoding_GetEncoding_System_String_), use values like: "utf-8", "iso-8859-1", etc. +* ResponseHeaderEncoding - enables other than ASCII encoding for incoming response headers (from requests that the proxy would forward out). Setting this value will leverage [`SocketsHttpHandler.ResponseHeaderEncodingSelector`](/dotnet/api/system.net.http.socketshttphandler.responseheaderencodingselector) and use the selected encoding for all headers. The value is then parsed by [`Encoding.GetEncoding`](/dotnet/api/system.text.encoding.getencoding#System_Text_Encoding_GetEncoding_System_String_), use values like: "utf-8", "iso-8859-1", etc. ```json "ResponseHeaderEncoding": "utf-8" ``` @@ -77,11 +78,11 @@ builder.WebHost.ConfigureKestrel(kestrel => kestrel.ResponseHeaderEncodingSelector = _ => Encoding.Latin1; }); ``` -- EnableMultipleHttp2Connections - enables opening additional HTTP/2 connections to the same server when the maximum number of concurrent streams is reached on all existing connections. The default is `true`. See [SocketsHttpHandler.EnableMultipleHttp2Connections](/dotnet/api/system.net.http.socketshttphandler.enablemultiplehttp2connections) +* EnableMultipleHttp2Connections - enables opening additional HTTP/2 connections to the same server when the maximum number of concurrent streams is reached on all existing connections. The default is `true`. See [SocketsHttpHandler.EnableMultipleHttp2Connections](/dotnet/api/system.net.http.socketshttphandler.enablemultiplehttp2connections) ```json "EnableMultipleHttp2Connections": false ``` -- WebProxy - Enables sending requests through an outbound HTTP proxy to reach the destinations. See [`SocketsHttpHandler.Proxy`](/dotnet/api/system.net.http.socketshttphandler.proxy) for details. +* WebProxy - Enables sending requests through an outbound HTTP proxy to reach the destinations. See [`SocketsHttpHandler.Proxy`](/dotnet/api/system.net.http.socketshttphandler.proxy) for details. - Address - The url address of the outbound proxy. - BypassOnLocal - A bool indicating if requests to local addresses should bypass the outbound proxy. - UseDefaultCredentials - A bool indicating if the current application credentials should be use to authenticate to the outbound proxy. ASP.NET Core does not impersonate authenticated users for outbound requests. @@ -105,10 +106,11 @@ HTTP request configuration is based on [ForwarderRequestConfig](xref:Yarp.Revers ``` Configuration settings: -- ActivityTimeout - how long a request is allowed to remain idle between any operation completing, after which it will be canceled. The default is 100 seconds. The timeout will reset when response headers are received or after successfully reading or writing any request, response, or streaming data like gRPC or WebSockets. TCP keep-alives and HTTP/2 protocol pings will not reset the timeout, but WebSocket pings will. -- Version - outgoing request [version](/dotnet/api/system.net.http.httprequestmessage.version). The supported values at the moment are `1.0`, `1.1`, `2` and `3`. Default value is 2. -- VersionPolicy - defines how the final version is selected for the outgoing requests. See [HttpRequestMessage.VersionPolicy](/dotnet/api/system.net.http.httprequestmessage.versionpolicy). The default value is `RequestVersionOrLower`. -- AllowResponseBuffering - allows to use write buffering when sending a response back to the client, if the server hosting YARP (e.g. IIS) supports it. **NOTE**: enabling it can break SSE (server side event) scenarios. + +* ActivityTimeout - how long a request is allowed to remain idle between any operation completing, after which it will be canceled. The default is 100 seconds. The timeout will reset when response headers are received or after successfully reading or writing any request, response, or streaming data like gRPC or WebSockets. TCP keep-alives and HTTP/2 protocol pings will not reset the timeout, but WebSocket pings will. +* Version - outgoing request [version](/dotnet/api/system.net.http.httprequestmessage.version). The supported values at the moment are `1.0`, `1.1`, `2` and `3`. Default value is 2. +* VersionPolicy - defines how the final version is selected for the outgoing requests. See [HttpRequestMessage.VersionPolicy](/dotnet/api/system.net.http.httprequestmessage.versionpolicy). The default value is `RequestVersionOrLower`. +* AllowResponseBuffering - allows to use write buffering when sending a response back to the client, if the server hosting YARP (e.g. IIS) supports it. **NOTE**: enabling it can break SSE (server side event) scenarios. ## Configuration example diff --git a/aspnetcore/fundamentals/servers/yarp/http3.md b/aspnetcore/fundamentals/servers/yarp/http3.md index 40922820656d..397675b4c3a8 100644 --- a/aspnetcore/fundamentals/servers/yarp/http3.md +++ b/aspnetcore/fundamentals/servers/yarp/http3.md @@ -14,8 +14,9 @@ ai-usage: ai-assisted ## Introduction YARP 1.1 supports HTTP/3 for inbound and outbound connections using the HTTP/3 support in .NET 7. To enable the HTTP/3 protocol in YARP you need to: -- Configure inbound connections in Kestrel -- Configure outbound connections in HttpClient + +* Configure inbound connections in Kestrel +* Configure outbound connections in HttpClient ## Set up HTTP/3 on Kestrel diff --git a/aspnetcore/fundamentals/servers/yarp/load-balancing.md b/aspnetcore/fundamentals/servers/yarp/load-balancing.md index 20fa54a8c5ce..6b0b67cce814 100644 --- a/aspnetcore/fundamentals/servers/yarp/load-balancing.md +++ b/aspnetcore/fundamentals/servers/yarp/load-balancing.md @@ -73,24 +73,24 @@ var clusters = new[] YARP ships with the following built-in policies: -- `FirstAlphabetical` +* `FirstAlphabetical` Select the alphabetically first available destination without considering load. This is useful for dual destination fail-over systems. -- `Random` +* `Random` Select a destination randomly. -- `PowerOfTwoChoices` (default) +* `PowerOfTwoChoices` (default) Select two random destinations and then select the one with the least assigned requests. This avoids the overhead of `LeastRequests` and the worst case for `Random` where it selects a busy destination. -- `RoundRobin` +* `RoundRobin` Select a destination by cycling through them in order. -- `LeastRequests` +* `LeastRequests` Select the destination with the least assigned requests. This requires examining all destinations. diff --git a/aspnetcore/fundamentals/servers/yarp/queryparameter-routing.md b/aspnetcore/fundamentals/servers/yarp/queryparameter-routing.md index 13cd2f74f5be..4f9fb5cdc8e5 100644 --- a/aspnetcore/fundamentals/servers/yarp/queryparameter-routing.md +++ b/aspnetcore/fundamentals/servers/yarp/queryparameter-routing.md @@ -253,11 +253,12 @@ A list of possible values to search for. The query parameter must match at least ### Mode [QueryParameterMatchMode](xref:Yarp.ReverseProxy.Configuration.QueryParameterMatchMode) specifies how to match the value(s) against the request query parameter. The default is `Exact`. -- Exact - The query parameter must match in its entirety, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. -- Prefix - The query parameter must match by prefix, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. -- Exists - The query parameter must exist and contain any non-empty value. -- Contains - The query parameter must contain the value for a match, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. -- NotContains - The query parameter must not contain any of the match values, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. + +* Exact - The query parameter must match in its entirety, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. +* Prefix - The query parameter must match by prefix, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. +* Exists - The query parameter must exist and contain any non-empty value. +* Contains - The query parameter must contain the value for a match, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. +* NotContains - The query parameter must not contain any of the match values, subject to the value of `IsCaseSensitive`. Only single query parameters are supported. If there are multiple query parameters with the same name then the match fails. ### IsCaseSensitive diff --git a/aspnetcore/fundamentals/servers/yarp/session-affinity.md b/aspnetcore/fundamentals/servers/yarp/session-affinity.md index 8c9c05072254..169af32d6f24 100644 --- a/aspnetcore/fundamentals/servers/yarp/session-affinity.md +++ b/aspnetcore/fundamentals/servers/yarp/session-affinity.md @@ -100,8 +100,9 @@ Once a request arrives and gets routed to a cluster with session affinity enable If a new affinity was established for the request, the affinity key gets attached to a response where exact key representation and location depends on the implementation. Currently, there are two built-in policies storing the key on a cookie or custom header. Once the response gets delivered to the client, it's the client responsibility to attach the key to all following requests in the same session. Further, when the next request carrying the key arrives to the proxy, it resolves the existing affinity, but affinity key does not get again attached to the response. Thus, only the first response carries the affinity key. There are four built-in affinity polices that format and store the key differently on requests and responses. The default policy is `HashCookie`. -- `HashCookie`, `ArrCookie`, and `Cookie` policies store the key as a cookie, hashed or encrypted respectively, see [Key Protection](#key-protection) below. The request's key will be delivered as a cookie with the configured name and sets the same cookie with `Set-Cookie` header on the first response in an affinitized sequence. The cookie name must be explicitly set via `SessionAffinityConfig.AffinityKeyName`. Other cookie properties can be configured via `SessionAffinityCookieConfig`. -- `CustomHeader` stores the key as an encrypted header. It expects the affinity key to be delivered in a custom header with the configured name and sets the same header on the first response in an affinitized sequence. The header name must be set via `SessionAffinityConfig.AffinityKeyName`. + +* `HashCookie`, `ArrCookie`, and `Cookie` policies store the key as a cookie, hashed or encrypted respectively, see [Key Protection](#key-protection) below. The request's key will be delivered as a cookie with the configured name and sets the same cookie with `Set-Cookie` header on the first response in an affinitized sequence. The cookie name must be explicitly set via `SessionAffinityConfig.AffinityKeyName`. Other cookie properties can be configured via `SessionAffinityCookieConfig`. +* `CustomHeader` stores the key as an encrypted header. It expects the affinity key to be delivered in a custom header with the configured name and sets the same header on the first response in an affinitized sequence. The header name must be set via `SessionAffinityConfig.AffinityKeyName`. **Important**: `AffinityKeyName` must be unique across all clusters with enabled session affinity to avoid conflicts. diff --git a/aspnetcore/fundamentals/servers/yarp/transforms-request.md b/aspnetcore/fundamentals/servers/yarp/transforms-request.md index 861721ff26a4..e60f81285b9a 100644 --- a/aspnetcore/fundamentals/servers/yarp/transforms-request.md +++ b/aspnetcore/fundamentals/servers/yarp/transforms-request.md @@ -15,10 +15,11 @@ ai-usage: ai-assisted Request transforms include the request path, query, HTTP version, method, and headers. In code these are represented by the [RequestTransformContext](xref:Yarp.ReverseProxy.Transforms.RequestTransformContext) object and processed by implementations of the abstract class [RequestTransform](xref:Yarp.ReverseProxy.Transforms.RequestTransform). Notes: -- The proxy request scheme (http/https), authority, and path base, are taken from the destination server address (`https://localhost:10001/Path/Base` in the example above) and should not be modified by transforms. -- The Host header can be overridden by transforms independent of the authority, see [RequestHeader](#requestheader) below. -- The request's original PathBase property is not used when constructing the proxy request, see [X-Forwarded](#x-forwarded). -- All incoming request headers are copied to the proxy request by default with the exception of the Host header (see `Defaults` [Defaults](xref:fundamentals/servers/yarp/timeouts#defaults)). [X-Forwarded](#x-forwarded) headers are also added by default. These behaviors can be configured using the following transforms. Additional request headers can be specified, or request headers can be excluded by setting them to an empty value. + +* The proxy request scheme (http/https), authority, and path base, are taken from the destination server address (`https://localhost:10001/Path/Base` in the example above) and should not be modified by transforms. +* The Host header can be overridden by transforms independent of the authority, see [RequestHeader](#requestheader) below. +* The request's original PathBase property is not used when constructing the proxy request, see [X-Forwarded](#x-forwarded). +* All incoming request headers are copied to the proxy request by default with the exception of the Host header (see `Defaults` [Defaults](xref:fundamentals/servers/yarp/timeouts#defaults)). [X-Forwarded](#x-forwarded) headers are also added by default. These behaviors can be configured using the following transforms. Additional request headers can be specified, or request headers can be excluded by setting them to an empty value. The following are built in transforms identified by their primary config key. These transforms are applied in the order they are specified in the route configuration. diff --git a/aspnetcore/fundamentals/servers/yarp/transforms.md b/aspnetcore/fundamentals/servers/yarp/transforms.md index 8365a7cde13d..de9c06975d6d 100644 --- a/aspnetcore/fundamentals/servers/yarp/transforms.md +++ b/aspnetcore/fundamentals/servers/yarp/transforms.md @@ -19,11 +19,12 @@ Request and response body transforms are not provided by YARP but you can write ## Defaults The following transforms are enabled by default for all routes. They can be configured or disabled as shown later in this document. -- Host - Suppress the incoming request's Host header. The proxy request will default to the host name specified in the destination server address. See `RequestHeaderOriginalHost` below. -- X-Forwarded-For - Sets the client's IP address to the X-Forwarded-For header. See `X-Forwarded` below. -- X-Forwarded-Proto - Sets the request's original scheme (http/https) to the X-Forwarded-Proto header. See `X-Forwarded` below. -- X-Forwarded-Host - Sets the request's original Host to the X-Forwarded-Host header. See `X-Forwarded` below. -- X-Forwarded-Prefix - Sets the request's original PathBase, if any, to the X-Forwarded-Prefix header. See `X-Forwarded` below. + +* Host - Suppress the incoming request's Host header. The proxy request will default to the host name specified in the destination server address. See `RequestHeaderOriginalHost` below. +* X-Forwarded-For - Sets the client's IP address to the X-Forwarded-For header. See `X-Forwarded` below. +* X-Forwarded-Proto - Sets the request's original scheme (http/https) to the X-Forwarded-Proto header. See `X-Forwarded` below. +* X-Forwarded-Host - Sets the request's original Host to the X-Forwarded-Host header. See `X-Forwarded` below. +* X-Forwarded-Prefix - Sets the request's original PathBase, if any, to the X-Forwarded-Prefix header. See `X-Forwarded` below. For example the following incoming request to `http://IncomingHost:5000/path`: ``` diff --git a/aspnetcore/host-and-deploy/iis/hosting-bundle.md b/aspnetcore/host-and-deploy/iis/hosting-bundle.md index 13399728ce9e..30c9471521ab 100644 --- a/aspnetcore/host-and-deploy/iis/hosting-bundle.md +++ b/aspnetcore/host-and-deploy/iis/hosting-bundle.md @@ -27,8 +27,8 @@ The .NET Core Hosting bundle is an installer for the .NET Core Runtime and the [ Download the installer using the following links: -- Current version:[.NET Core Hosting Bundle installer (direct download)](https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer) -- [Previous and pre-release versions](https://dotnet.microsoft.com/en-us/download/dotnet) +* Current version:[.NET Core Hosting Bundle installer (direct download)](https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer) +* [Previous and pre-release versions](https://dotnet.microsoft.com/en-us/download/dotnet) ## Visual C++ Redistributable Requirement diff --git a/aspnetcore/log-mon/metrics/built-in/includes/built-in10.md b/aspnetcore/log-mon/metrics/built-in/includes/built-in10.md index 367dc420ff10..4eb20d07d585 100644 --- a/aspnetcore/log-mon/metrics/built-in/includes/built-in10.md +++ b/aspnetcore/log-mon/metrics/built-in/includes/built-in10.md @@ -9,8 +9,8 @@ See [Using ASP.NET Core metrics](xref:log-mon/metrics/metrics) for information a The `Microsoft.AspNetCore.Hosting` metrics report high-level information about HTTP requests received by ASP.NET Core: -- [`http.server.request.duration`](#metric-httpserverrequestduration) -- [`http.server.active_requests`](#metric-httpserveractive_requests) +* [`http.server.request.duration`](#metric-httpserverrequestduration) +* [`http.server.active_requests`](#metric-httpserveractive_requests) #### Metric: `http.server.request.duration` @@ -30,14 +30,14 @@ The `Microsoft.AspNetCore.Hosting` metrics report high-level information about H The time used to handle an inbound HTTP request as measured at the hosting layer of ASP.NET Core. The time measurement starts once the underlying web host has: -- Sufficiently parsed the HTTP request headers on the inbound network stream to identify the new request. -- Initialized the context data structures such as the . +* Sufficiently parsed the HTTP request headers on the inbound network stream to identify the new request. +* Initialized the context data structures such as the . The time ends when: -- The ASP.NET Core handler pipeline is finished executing. -- All response data has been sent. -- The context data structures for the request are being disposed. +* The ASP.NET Core handler pipeline is finished executing. +* All response data has been sent. +* The context data structures for the request are being disposed. When using OpenTelemetry, the default buckets for this metric are set to [ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]. @@ -58,7 +58,7 @@ When using OpenTelemetry, the default buckets for this metric are set to [ 0.005 The `Microsoft.AspNetCore.Routing` metrics report information about [routing HTTP requests](/aspnet/core/fundamentals/routing) to ASP.NET Core endpoints: -- [`aspnetcore.routing.match_attempts`](#metric-aspnetcoreroutingmatch_attempts) +* [`aspnetcore.routing.match_attempts`](#metric-aspnetcoreroutingmatch_attempts) #### Metric: `aspnetcore.routing.match_attempts` @@ -78,7 +78,7 @@ The `Microsoft.AspNetCore.Routing` metrics report information about [routing HTT The `Microsoft.AspNetCore.Diagnostics` metrics report diagnostics information from [ASP.NET Core error handling middleware](/aspnet/core/fundamentals/error-handling): -- [`aspnetcore.diagnostics.exceptions`](#metric-aspnetcorediagnosticsexceptions) +* [`aspnetcore.diagnostics.exceptions`](#metric-aspnetcorediagnosticsexceptions) #### Metric: `aspnetcore.diagnostics.exceptions` @@ -98,11 +98,11 @@ The `Microsoft.AspNetCore.Diagnostics` metrics report diagnostics information fr The `Microsoft.AspNetCore.RateLimiting` metrics report rate limiting information from [ASP.NET Core rate-limiting middleware](/aspnet/core/performance/rate-limit): -- [`aspnetcore.rate_limiting.active_request_leases`](#metric-aspnetcorerate_limitingactive_request_leases) -- [`aspnetcore.rate_limiting.request_lease.duration`](#metric-aspnetcorerate_limitingrequest_leaseduration) -- [`aspnetcore.rate_limiting.queued_requests`](#metric-aspnetcorerate_limitingqueued_requests) -- [`aspnetcore.rate_limiting.request.time_in_queue`](#metric-aspnetcorerate_limitingrequesttime_in_queue) -- [`aspnetcore.rate_limiting.requests`](#metric-aspnetcorerate_limitingrequests) +* [`aspnetcore.rate_limiting.active_request_leases`](#metric-aspnetcorerate_limitingactive_request_leases) +* [`aspnetcore.rate_limiting.request_lease.duration`](#metric-aspnetcorerate_limitingrequest_leaseduration) +* [`aspnetcore.rate_limiting.queued_requests`](#metric-aspnetcorerate_limitingqueued_requests) +* [`aspnetcore.rate_limiting.request.time_in_queue`](#metric-aspnetcorerate_limitingrequesttime_in_queue) +* [`aspnetcore.rate_limiting.requests`](#metric-aspnetcorerate_limitingrequests) #### Metric: `aspnetcore.rate_limiting.active_request_leases` @@ -170,8 +170,8 @@ The `Microsoft.AspNetCore.RateLimiting` metrics report rate limiting information The `Microsoft.AspNetCore.HeaderParsing` metrics report information about [ASP.NET Core header parsing](https://www.nuget.org/packages/Microsoft.AspNetCore.HeaderParsing): -- [`aspnetcore.header_parsing.parse_errors`](#metric-aspnetcoreheader_parsingparse_errors) -- [`aspnetcore.header_parsing.cache_accesses`](#metric-aspnetcoreheader_parsingcache_accesses) +* [`aspnetcore.header_parsing.parse_errors`](#metric-aspnetcoreheader_parsingparse_errors) +* [`aspnetcore.header_parsing.cache_accesses`](#metric-aspnetcoreheader_parsingcache_accesses) #### Metric: `aspnetcore.header_parsing.parse_errors` @@ -205,14 +205,14 @@ The metric is emitted only for HTTP request header parsers that support caching. The `Microsoft.AspNetCore.Server.Kestrel` metrics report HTTP connection information from [ASP.NET Core Kestrel web server](/aspnet/core/fundamentals/servers/kestrel): -- [`kestrel.active_connections`](#metric-kestrelactive_connections) -- [`kestrel.connection.duration`](#metric-kestrelconnectionduration) -- [`kestrel.rejected_connections`](#metric-kestrelrejected_connections) -- [`kestrel.queued_connections`](#metric-kestrelqueued_connections) -- [`kestrel.queued_requests`](#metric-kestrelqueued_requests) -- [`kestrel.upgraded_connections`](#metric-kestrelupgraded_connections) -- [`kestrel.tls_handshake.duration`](#metric-kestreltls_handshakeduration) -- [`kestrel.active_tls_handshakes`](#metric-kestrelactive_tls_handshakes) +* [`kestrel.active_connections`](#metric-kestrelactive_connections) +* [`kestrel.connection.duration`](#metric-kestrelconnectionduration) +* [`kestrel.rejected_connections`](#metric-kestrelrejected_connections) +* [`kestrel.queued_connections`](#metric-kestrelqueued_connections) +* [`kestrel.queued_requests`](#metric-kestrelqueued_requests) +* [`kestrel.upgraded_connections`](#metric-kestrelupgraded_connections) +* [`kestrel.tls_handshake.duration`](#metric-kestreltls_handshakeduration) +* [`kestrel.active_tls_handshakes`](#metric-kestrelactive_tls_handshakes) #### Metric: `kestrel.active_connections` @@ -354,8 +354,8 @@ When using OpenTelemetry, the default buckets for this metic are set to [ 0.005, The `Microsoft.AspNetCore.Http.Connections` metrics report connection information from [ASP.NET Core SignalR](/aspnet/core/signalr/introduction): -- [`signalr.server.connection.duration`](#metric-signalrserverconnectionduration) -- [`signalr.server.active_connections`](#metric-signalrserveractive_connections) +* [`signalr.server.connection.duration`](#metric-signalrserverconnectionduration) +* [`signalr.server.active_connections`](#metric-signalrserveractive_connections) #### Metric: `signalr.server.connection.duration` diff --git a/aspnetcore/log-mon/metrics/built-in/includes/built-in8.md b/aspnetcore/log-mon/metrics/built-in/includes/built-in8.md index 70efbbf48fbf..e9450b1f510c 100644 --- a/aspnetcore/log-mon/metrics/built-in/includes/built-in8.md +++ b/aspnetcore/log-mon/metrics/built-in/includes/built-in8.md @@ -11,8 +11,8 @@ see [Available counters](/dotnet/core/diagnostics/available-counters). The `Microsoft.AspNetCore.Hosting` metrics report high-level information about HTTP requests received by ASP.NET Core: -- [`http.server.request.duration`](#metric-httpserverrequestduration) -- [`http.server.active_requests`](#metric-httpserveractive_requests) +* [`http.server.request.duration`](#metric-httpserverrequestduration) +* [`http.server.active_requests`](#metric-httpserveractive_requests) ##### Metric: `http.server.request.duration` @@ -32,14 +32,14 @@ The `Microsoft.AspNetCore.Hosting` metrics report high-level information about H The time used to handle an inbound HTTP request as measured at the hosting layer of ASP.NET Core. The time measurement starts once the underlying web host has: -- Sufficiently parsed the HTTP request headers on the inbound network stream to identify the new request. -- Initialized the context data structures such as the . +* Sufficiently parsed the HTTP request headers on the inbound network stream to identify the new request. +* Initialized the context data structures such as the . The time ends when: -- The ASP.NET Core handler pipeline is finished executing. -- All response data has been sent. -- The context data structures for the request are being disposed. +* The ASP.NET Core handler pipeline is finished executing. +* All response data has been sent. +* The context data structures for the request are being disposed. When using OpenTelemetry, the default buckets for this metric are set to [ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]. @@ -58,7 +58,7 @@ When using OpenTelemetry, the default buckets for this metric are set to [ 0.005 The `Microsoft.AspNetCore.Routing` metrics report information about [routing HTTP requests](/aspnet/core/fundamentals/routing) to ASP.NET Core endpoints: -- [`aspnetcore.routing.match_attempts`](#metric-aspnetcoreroutingmatch_attempts) +* [`aspnetcore.routing.match_attempts`](#metric-aspnetcoreroutingmatch_attempts) ##### Metric: `aspnetcore.routing.match_attempts` @@ -75,8 +75,7 @@ The `Microsoft.AspNetCore.Routing` metrics report information about [routing HTT ## `Microsoft.AspNetCore.Diagnostics` The `Microsoft.AspNetCore.Diagnostics` metrics report diagnostics information from [ASP.NET Core error handling middleware](/aspnet/core/fundamentals/error-handling): - -- [`aspnetcore.diagnostics.exceptions`](#metric-aspnetcorediagnosticsexceptions) +* [`aspnetcore.diagnostics.exceptions`](#metric-aspnetcorediagnosticsexceptions) ##### Metric: `aspnetcore.diagnostics.exceptions` @@ -94,11 +93,11 @@ The `Microsoft.AspNetCore.Diagnostics` metrics report diagnostics information fr The `Microsoft.AspNetCore.RateLimiting` metrics report rate limiting information from [ASP.NET Core rate-limiting middleware](/aspnet/core/performance/rate-limit): -- [`aspnetcore.rate_limiting.active_request_leases`](#metric-aspnetcorerate_limitingactive_request_leases) -- [`aspnetcore.rate_limiting.request_lease.duration`](#metric-aspnetcorerate_limitingrequest_leaseduration) -- [`aspnetcore.rate_limiting.queued_requests`](#metric-aspnetcorerate_limitingqueued_requests) -- [`aspnetcore.rate_limiting.request.time_in_queue`](#metric-aspnetcorerate_limitingrequesttime_in_queue) -- [`aspnetcore.rate_limiting.requests`](#metric-aspnetcorerate_limitingrequests) +* [`aspnetcore.rate_limiting.active_request_leases`](#metric-aspnetcorerate_limitingactive_request_leases) +* [`aspnetcore.rate_limiting.request_lease.duration`](#metric-aspnetcorerate_limitingrequest_leaseduration) +* [`aspnetcore.rate_limiting.queued_requests`](#metric-aspnetcorerate_limitingqueued_requests) +* [`aspnetcore.rate_limiting.request.time_in_queue`](#metric-aspnetcorerate_limitingrequesttime_in_queue) +* [`aspnetcore.rate_limiting.requests`](#metric-aspnetcorerate_limitingrequests) ##### Metric: `aspnetcore.rate_limiting.active_request_leases` @@ -156,8 +155,8 @@ The `Microsoft.AspNetCore.RateLimiting` metrics report rate limiting information The `Microsoft.AspNetCore.HeaderParsing` metrics report information about [ASP.NET Core header parsing](https://www.nuget.org/packages/Microsoft.AspNetCore.HeaderParsing): -- [`aspnetcore.header_parsing.parse_errors`](#metric-aspnetcoreheader_parsingparse_errors) -- [`aspnetcore.header_parsing.cache_accesses`](#metric-aspnetcoreheader_parsingcache_accesses) +* [`aspnetcore.header_parsing.parse_errors`](#metric-aspnetcoreheader_parsingparse_errors) +* [`aspnetcore.header_parsing.cache_accesses`](#metric-aspnetcoreheader_parsingcache_accesses) ##### Metric: `aspnetcore.header_parsing.parse_errors` @@ -187,14 +186,14 @@ The metric is emitted only for HTTP request header parsers that support caching. The `Microsoft.AspNetCore.Server.Kestrel` metrics report HTTP connection information from [ASP.NET Core Kestrel web server](/aspnet/core/fundamentals/servers/kestrel): -- [`kestrel.active_connections`](#metric-kestrelactive_connections) -- [`kestrel.connection.duration`](#metric-kestrelconnectionduration) -- [`kestrel.rejected_connections`](#metric-kestrelrejected_connections) -- [`kestrel.queued_connections`](#metric-kestrelqueued_connections) -- [`kestrel.queued_requests`](#metric-kestrelqueued_requests) -- [`kestrel.upgraded_connections`](#metric-kestrelupgraded_connections) -- [`kestrel.tls_handshake.duration`](#metric-kestreltls_handshakeduration) -- [`kestrel.active_tls_handshakes`](#metric-kestrelactive_tls_handshakes) +* [`kestrel.active_connections`](#metric-kestrelactive_connections) +* [`kestrel.connection.duration`](#metric-kestrelconnectionduration) +* [`kestrel.rejected_connections`](#metric-kestrelrejected_connections) +* [`kestrel.queued_connections`](#metric-kestrelqueued_connections) +* [`kestrel.queued_requests`](#metric-kestrelqueued_requests) +* [`kestrel.upgraded_connections`](#metric-kestrelupgraded_connections) +* [`kestrel.tls_handshake.duration`](#metric-kestreltls_handshakeduration) +* [`kestrel.active_tls_handshakes`](#metric-kestrelactive_tls_handshakes) ##### Metric: `kestrel.active_connections` @@ -330,8 +329,8 @@ When using OpenTelemetry, the default buckets for this metic are set to [ 0.005, The `Microsoft.AspNetCore.Http.Connections` metrics report connection information from [ASP.NET Core SignalR](/aspnet/core/signalr/introduction): -- [`signalr.server.connection.duration`](#metric-signalrserverconnectionduration) -- [`signalr.server.active_connections`](#metric-signalrserveractive_connections) +* [`signalr.server.connection.duration`](#metric-signalrserverconnectionduration) +* [`signalr.server.active_connections`](#metric-signalrserveractive_connections) ##### Metric: `signalr.server.connection.duration` diff --git a/aspnetcore/migration/inc/overview.md b/aspnetcore/migration/inc/overview.md index 2a8cd0e279bb..84ef637dfabf 100644 --- a/aspnetcore/migration/inc/overview.md +++ b/aspnetcore/migration/inc/overview.md @@ -63,10 +63,10 @@ The Visual Studio extension [.NET Upgrade Assistant](https://marketplace.visuals The `Microsoft.AspNetCore.SystemWebAdapters` namespace is a collection of runtime helpers that facilitate using code written against `System.Web` while moving to ASP.NET Core. There are a few packages that may be used to use features from these adapters: -- `Microsoft.AspNetCore.SystemWebAdapters`: This package is used in supporting libraries and provide the System.Web APIs you may have taken a dependency on, such as `HttpContext` and others. This package targets .NET Standard 2.0, .NET 4.5+, and .NET 6+. -- `Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices`: This package only targets .NET Framework and is intended to provide services to ASP.NET Framework applications that may need to provide incremental migrations. This is generally not expected to be referenced from libraries, but rather from the applications themselves. -- `Microsoft.AspNetCore.SystemWebAdapters.CoreServices`: This package only targets .NET 6+ and is intended to provide services to ASP.NET Core applications to configure behavior of `System.Web` APIs as well as opting into any behaviors for incremental migration. This is generally not expected to be referenced from libraries, but rather from the applications themselves. -- `Microsoft.AspNetCore.SystemWebAdapters.Abstractions`: This package is a supporting package that provides abstractions for services used by both the ASP.NET Core and ASP.NET Framework application such as session state serialization. +* `Microsoft.AspNetCore.SystemWebAdapters`: This package is used in supporting libraries and provide the System.Web APIs you may have taken a dependency on, such as `HttpContext` and others. This package targets .NET Standard 2.0, .NET 4.5+, and .NET 6+. +* `Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices`: This package only targets .NET Framework and is intended to provide services to ASP.NET Framework applications that may need to provide incremental migrations. This is generally not expected to be referenced from libraries, but rather from the applications themselves. +* `Microsoft.AspNetCore.SystemWebAdapters.CoreServices`: This package only targets .NET 6+ and is intended to provide services to ASP.NET Core applications to configure behavior of `System.Web` APIs as well as opting into any behaviors for incremental migration. This is generally not expected to be referenced from libraries, but rather from the applications themselves. +* `Microsoft.AspNetCore.SystemWebAdapters.Abstractions`: This package is a supporting package that provides abstractions for services used by both the ASP.NET Core and ASP.NET Framework application such as session state serialization. For examples of scenarios where this is useful, see [the adapters article](xref:migration/inc/adapters). diff --git a/aspnetcore/migration/inc/remote-session.md b/aspnetcore/migration/inc/remote-session.md index d6d37aeb8cfb..bc7187dd9ad9 100644 --- a/aspnetcore/migration/inc/remote-session.md +++ b/aspnetcore/migration/inc/remote-session.md @@ -53,7 +53,7 @@ Readonly session will retrieve the session state from the framework app without Writeable session state protocol starts with the same as the readonly, but differs in the following: -- Requires an additional `PUT` request to update the state -- The initial `GET` request must be kept open until the session is done; if closed, the session will not be able to be updated +* Requires an additional `PUT` request to update the state +* The initial `GET` request must be kept open until the session is done; if closed, the session will not be able to be updated ![Writeable session state protocol starts with the same as the readonly](~/migration/inc/overview/static/writesession.png) diff --git a/aspnetcore/migration/inc/session.md b/aspnetcore/migration/inc/session.md index 0635d2f2024e..dd59f3a9ee21 100644 --- a/aspnetcore/migration/inc/session.md +++ b/aspnetcore/migration/inc/session.md @@ -15,20 +15,20 @@ uid: migration/inc/session Session state in ASP.NET Framework provided a number of features that ASP.NET Core does not provide. In order to update from ASP.NET Framework to Core, the adapters provide mechanisms to enable populating session state with similar behavior as `System.Web` did. Some of the differences between framework and core are: -- ASP.NET Framework would lock session usage within a session, so subsequent requests in a session are handled in a serial fashion. This is different than ASP.NET Core that does not provide any of these guarantees. -- ASP.NET Framework would serialize and deserialize objects automatically (unless being done in-memory). ASP.NET Core provides a mechanism to store a `byte[]` given a key. Any object serialization/deserialization has to be done manually by the user. +* ASP.NET Framework would lock session usage within a session, so subsequent requests in a session are handled in a serial fashion. This is different than ASP.NET Core that does not provide any of these guarantees. +* ASP.NET Framework would serialize and deserialize objects automatically (unless being done in-memory). ASP.NET Core provides a mechanism to store a `byte[]` given a key. Any object serialization/deserialization has to be done manually by the user. The adapter infrastructure exposes two interfaces that can be used to implement any session storage system. These are: -- `Microsoft.AspNetCore.SystemWebAdapters.ISessionManager`: This has a single method that gets passed an and the session metadata and expects an `ISessionState` object to be returned. -- `Microsoft.AspNetCore.SystemWebAdapters.ISessionState`: This describes the state of a session object. It is used as the backing of the type. +* `Microsoft.AspNetCore.SystemWebAdapters.ISessionManager`: This has a single method that gets passed an and the session metadata and expects an `ISessionState` object to be returned. +* `Microsoft.AspNetCore.SystemWebAdapters.ISessionState`: This describes the state of a session object. It is used as the backing of the type. ## Serialization Since the adapters provide the ability to work with strongly-typed session state, we must be able to serialize and deserialize types. This is customized through the `Microsoft.AspNetCore.SystemWebAdapters.SessionState.Serialization.ISessionKeySerializer`. A default JSON implementation is provided that is configured via the `JsonSessionSerializerOptions`: -- `RegisterKey(string)` - Registers a session key to a known type. This is required in order to serialize/deserialize the session state correctly. If a key is found that there is no registration for, an error will be thrown and session will not be available. +* `RegisterKey(string)` - Registers a session key to a known type. This is required in order to serialize/deserialize the session state correctly. If a key is found that there is no registration for, an error will be thrown and session will not be available. :::code language="csharp" source="~/migration/inc/samples/session/Program.cs" id="snippet_Serialization" ::: @@ -37,9 +37,9 @@ A default JSON implementation is provided that is configured via the `JsonSessio There are two available implementations of the session state object that currently ship, each with some trade offs of features. The best choice for an app may depend on which part of the migration it is in, and may change over time. -- Strongly typed: Provides the ability to access an object and can be cast to the expected type -- Locking: Ensures multiple requests within a single session are queued up and aren't accessing the session at the same time -- Standalone: Use when you're not sharing session between ASP.NET Framework and ASP.NET Core to avoid modifying code in class libraries that references SessionState +* Strongly typed: Provides the ability to access an object and can be cast to the expected type +* Locking: Ensures multiple requests within a single session are queued up and aren't accessing the session at the same time +* Standalone: Use when you're not sharing session between ASP.NET Framework and ASP.NET Core to avoid modifying code in class libraries that references SessionState Below are the available implementations: diff --git a/aspnetcore/migration/inc/usage_guidance.md b/aspnetcore/migration/inc/usage_guidance.md index e94605fcc60c..8fe278a63798 100644 --- a/aspnetcore/migration/inc/usage_guidance.md +++ b/aspnetcore/migration/inc/usage_guidance.md @@ -23,8 +23,8 @@ The adapters are backed by which ca There are two ways to convert an to a : -- Implicit casting -- Constructor usage +* Implicit casting +* Constructor usage **Recommendation**: For the most cases, implicit casting should be preferred as this will cache the created instance and ensure only a single per request. diff --git a/aspnetcore/migration/proper-to-2x/includes/index5.md b/aspnetcore/migration/proper-to-2x/includes/index5.md index d2cca44ae705..f29bf7374012 100644 --- a/aspnetcore/migration/proper-to-2x/includes/index5.md +++ b/aspnetcore/migration/proper-to-2x/includes/index5.md @@ -32,9 +32,9 @@ When the metapackage is used, no packages referenced in the metapackage are depl The `.csproj` file format has been simplified in ASP.NET Core. Some notable changes include: -- Explicit inclusion of files isn't necessary for them to be considered part of the project. This reduces the risk of XML merge conflicts when working on large teams. -- There are no GUID-based references to other projects, which improves file readability. -- The file can be edited without unloading it in Visual Studio: +* Explicit inclusion of files isn't necessary for them to be considered part of the project. This reduces the risk of XML merge conflicts when working on large teams. +* There are no GUID-based references to other projects, which improves file readability. +* The file can be edited without unloading it in Visual Studio: ![Edit CSPROJ context menu option in Visual Studio 2017](~/migration/proper-to-2x/_static/EditProjectVs2017.png)] @@ -56,10 +56,10 @@ ASP.NET Core uses a similar approach, but doesn't rely on OWIN to handle the ent `Startup` must include a `Configure` method. In `Configure`, add the necessary middleware to the pipeline. In the following example (from the default web site template), extension methods configure the pipeline with support for: -- Error pages -- HTTP Strict Transport Security -- HTTP redirection to HTTPS -- ASP.NET Core MVC +* Error pages +* HTTP Strict Transport Security +* HTTP redirection to HTTPS +* ASP.NET Core MVC [!code-csharp[](~/migration/proper-to-2x/samples/startup.cs)] @@ -195,5 +195,6 @@ For apps that post JSON information to controllers and use JSON Input Formatters ## Additional resources -- [Porting Libraries to .NET Core](/dotnet/core/porting/libraries) +* [Porting Libraries to .NET Core](/dotnet/core/porting/libraries) + :::moniker-end \ No newline at end of file diff --git a/aspnetcore/mobile/native-mobile-backend.md b/aspnetcore/mobile/native-mobile-backend.md index 35c6ef478a66..4669b8a21fbc 100644 --- a/aspnetcore/mobile/native-mobile-backend.md +++ b/aspnetcore/mobile/native-mobile-backend.md @@ -317,6 +317,6 @@ Once you've identified a common policy for your APIs, you can usually encapsulat ## See also -- [.NET MAUI: Consume a REST-based web service](/dotnet/maui/data-cloud/rest/) -- [Consume REST web services in .NET MAUI apps](/training/modules/consume-rest-services-maui/) -- [Create a web API with ASP.NET Core controllers](/training/modules/build-web-api-aspnet-core/) +* [.NET MAUI: Consume a REST-based web service](/dotnet/maui/data-cloud/rest/) +* [Consume REST web services in .NET MAUI apps](/training/modules/consume-rest-services-maui/) +* [Create a web API with ASP.NET Core controllers](/training/modules/build-web-api-aspnet-core/) diff --git a/aspnetcore/mvc/advanced/custom-model-binding.md b/aspnetcore/mvc/advanced/custom-model-binding.md index 792c4141d721..0aa8c4c589f0 100644 --- a/aspnetcore/mvc/advanced/custom-model-binding.md +++ b/aspnetcore/mvc/advanced/custom-model-binding.md @@ -70,9 +70,9 @@ As long as the binder can bind request data to appropriately named properties or In this section we'll implement a custom model binder that: -- Converts incoming request data into strongly typed key arguments. -- Uses Entity Framework Core to fetch the associated entity. -- Passes the associated entity as an argument to the action method. +* Converts incoming request data into strongly typed key arguments. +* Uses Entity Framework Core to fetch the associated entity. +* Passes the associated entity as an argument to the action method. The following sample uses the `ModelBinder` attribute on the `Author` model: @@ -129,9 +129,9 @@ However, if an app requires polymorphic model binding, an implementation might l Custom model binders: -- Shouldn't attempt to set status codes or return results (for example, 404 Not Found). If model binding fails, an [action filter](xref:mvc/controllers/filters) or logic within the action method itself should handle the failure. -- Are most useful for eliminating repetitive code and cross-cutting concerns from action methods. -- Typically shouldn't be used to convert a string into a custom type, a is usually a better option. +* Shouldn't attempt to set status codes or return results (for example, 404 Not Found). If model binding fails, an [action filter](xref:mvc/controllers/filters) or logic within the action method itself should handle the failure. +* Are most useful for eliminating repetitive code and cross-cutting concerns from action methods. +* Typically shouldn't be used to convert a string into a custom type, a is usually a better option. :::moniker-end :::moniker range="< aspnetcore-3.0" @@ -191,9 +191,9 @@ As long as the binder can bind request data to appropriately named properties or In this section we'll implement a custom model binder that: -- Converts incoming request data into strongly typed key arguments. -- Uses Entity Framework Core to fetch the associated entity. -- Passes the associated entity as an argument to the action method. +* Converts incoming request data into strongly typed key arguments. +* Uses Entity Framework Core to fetch the associated entity. +* Passes the associated entity as an argument to the action method. The following sample uses the `ModelBinder` attribute on the `Author` model: @@ -250,8 +250,8 @@ However, if an app requires polymorphic model binding, an implementation might l Custom model binders: -- Shouldn't attempt to set status codes or return results (for example, 404 Not Found). If model binding fails, an [action filter](xref:mvc/controllers/filters) or logic within the action method itself should handle the failure. -- Are most useful for eliminating repetitive code and cross-cutting concerns from action methods. -- Typically shouldn't be used to convert a string into a custom type, a is usually a better option. +* Shouldn't attempt to set status codes or return results (for example, 404 Not Found). If model binding fails, an [action filter](xref:mvc/controllers/filters) or logic within the action method itself should handle the failure. +* Are most useful for eliminating repetitive code and cross-cutting concerns from action methods. +* Typically shouldn't be used to convert a string into a custom type, a is usually a better option. :::moniker-end diff --git a/aspnetcore/mvc/views/tag-helpers/built-in/samples/TagHelpersBuiltIn/README.md b/aspnetcore/mvc/views/tag-helpers/built-in/samples/TagHelpersBuiltIn/README.md index ae4dde8f9fe0..b549b2748e95 100644 --- a/aspnetcore/mvc/views/tag-helpers/built-in/samples/TagHelpersBuiltIn/README.md +++ b/aspnetcore/mvc/views/tag-helpers/built-in/samples/TagHelpersBuiltIn/README.md @@ -2,20 +2,20 @@ This sample illustrates variations of the built-in Tag Helpers with both MVC and Razor Pages: -- [Anchor Tag Helper](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper) - - [asp-action](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-action) - - [asp-all-route-data](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-all-route-data) - - [asp-area](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-area) +* [Anchor Tag Helper](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper) + * [`asp-action`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-action) + * [`asp-all-route-data`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-all-route-data) + * [`asp-area`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-area) - [asp-controller](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-controller) - [asp-fragment](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-fragment) - [asp-host](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-host) - [asp-page](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-page) - [asp-page-handler](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-page-handler) - - [asp-protocol](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-protocol) - - [asp-route](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-route) - - [asp-route-{value}](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-route-value) -- [Partial Tag Helper](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper) - - [for](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#for) - - [model](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#model) - - [name](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#name) + * [`asp-protocol`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-protocol) + * [`asp-route`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-route) + * [`asp-route-{value}`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper#asp-route-value) +* [Partial Tag Helper](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper) + -* [`for`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#for) + * [`model`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#model) + * [`name`](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#name) - [view-data](https://learn.microsoft.com/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper#view-data) diff --git a/aspnetcore/performance/ObjectPool.md b/aspnetcore/performance/ObjectPool.md index 1a3d85c13b1c..808ec65f3c19 100644 --- a/aspnetcore/performance/ObjectPool.md +++ b/aspnetcore/performance/ObjectPool.md @@ -19,16 +19,16 @@ By [Günther Foidl](https://github.com/gfoidl), [Steve Gordon](https://twitter.c Apps might want to use the object pool if the objects that are being managed are: -- Expensive to allocate/initialize. -- Represent a limited resource. -- Used predictably and frequently. +* Expensive to allocate/initialize. +* Represent a limited resource. +* Used predictably and frequently. For example, the ASP.NET Core framework uses the object pool in some places to reuse instances. `StringBuilder` allocates and manages its own buffers to hold character data. ASP.NET Core regularly uses `StringBuilder` to implement features, and reusing them provides a performance benefit. Object pooling doesn't always improve performance: -- Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. -- Objects managed by the pool aren't de-allocated until the pool is de-allocated. +* Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. +* Objects managed by the pool aren't de-allocated until the pool is de-allocated. Use object pooling only after collecting performance data using realistic scenarios for your app or library. diff --git a/aspnetcore/performance/ObjectPool/includes/ObjectPool1-5.md b/aspnetcore/performance/ObjectPool/includes/ObjectPool1-5.md index a8d21884ad04..5e01148ea2b4 100644 --- a/aspnetcore/performance/ObjectPool/includes/ObjectPool1-5.md +++ b/aspnetcore/performance/ObjectPool/includes/ObjectPool1-5.md @@ -4,16 +4,16 @@ You might want to use the object pool if the objects that are being managed are: -- Expensive to allocate/initialize. -- Represent some limited resource. -- Used predictably and frequently. +* Expensive to allocate/initialize. +* Represent some limited resource. +* Used predictably and frequently. For example, the ASP.NET Core framework uses the object pool in some places to reuse instances. `StringBuilder` allocates and manages its own buffers to hold character data. ASP.NET Core regularly uses `StringBuilder` to implement features, and reusing them provides a performance benefit. Object pooling doesn't always improve performance: -- Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. -- Objects managed by the pool aren't de-allocated until the pool is de-allocated. +* Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. +* Objects managed by the pool aren't de-allocated until the pool is de-allocated. Use object pooling only after collecting performance data using realistic scenarios for your app or library. diff --git a/aspnetcore/performance/ObjectPool/includes/ObjectPool6.md b/aspnetcore/performance/ObjectPool/includes/ObjectPool6.md index 64d9e783a243..d1b14dd0b486 100644 --- a/aspnetcore/performance/ObjectPool/includes/ObjectPool6.md +++ b/aspnetcore/performance/ObjectPool/includes/ObjectPool6.md @@ -4,16 +4,16 @@ Apps might want to use the object pool if the objects that are being managed are: -- Expensive to allocate/initialize. -- Represent a limited resource. -- Used predictably and frequently. +* Expensive to allocate/initialize. +* Represent a limited resource. +* Used predictably and frequently. For example, the ASP.NET Core framework uses the object pool in some places to reuse instances. `StringBuilder` allocates and manages its own buffers to hold character data. ASP.NET Core regularly uses `StringBuilder` to implement features, and reusing them provides a performance benefit. Object pooling doesn't always improve performance: -- Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. -- Objects managed by the pool aren't de-allocated until the pool is de-allocated. +* Unless the initialization cost of an object is high, it's usually slower to get the object from the pool. +* Objects managed by the pool aren't de-allocated until the pool is de-allocated. Use object pooling only after collecting performance data using realistic scenarios for your app or library. diff --git a/aspnetcore/performance/caching/hybrid.md b/aspnetcore/performance/caching/hybrid.md index c880d5c7c31c..caebf9ff32f3 100644 --- a/aspnetcore/performance/caching/hybrid.md +++ b/aspnetcore/performance/caching/hybrid.md @@ -73,8 +73,8 @@ It's the caller's responsibility to ensure that a key scheme is valid and can't There is no significance placed on tokens such as `/` or `_`. The entire key value is treated as an opaque identifying string. In this case, you could omit the `/` and `_` with no change to the way the cache functions, but a delimiter is usually used to avoid ambiguity - for example `$"order{customerId}{orderId}"` could cause confusion between: -- `customerId` 42 with `orderId` 123 -- `customerId` 421 with `orderId` 23 +* `customerId` 42 with `orderId` 123 +* `customerId` 421 with `orderId` 23 (both of which would generate the cache key `order42123`) diff --git a/aspnetcore/performance/diagnostic-tools.md b/aspnetcore/performance/diagnostic-tools.md index 44468dcdc8a0..77bf092c6abc 100644 --- a/aspnetcore/performance/diagnostic-tools.md +++ b/aspnetcore/performance/diagnostic-tools.md @@ -25,21 +25,21 @@ More information is available in [Visual Studio documentation](/visualstudio/pro Azure Application Insights provides multiple ways to give insights on monitored apps: -- [Application Map](/azure/application-insights/app-insights-app-map) – helps spot performance bottlenecks or failure hot-spots across all components of distributed apps. -- [Azure Metrics Explorer](/azure/azure-monitor/platform/metrics-getting-started) is a component of the Microsoft Azure portal that allows plotting charts, visually correlating trends, and investigating spikes and dips in metrics' values. -- [Performance blade in Application Insights portal](/azure/application-insights/app-insights-tutorial-performance): +* [Application Map](/azure/application-insights/app-insights-app-map) – helps spot performance bottlenecks or failure hot-spots across all components of distributed apps. +* [Azure Metrics Explorer](/azure/azure-monitor/platform/metrics-getting-started) is a component of the Microsoft Azure portal that allows plotting charts, visually correlating trends, and investigating spikes and dips in metrics' values. +* [Performance blade in Application Insights portal](/azure/application-insights/app-insights-tutorial-performance): - - Shows performance details for different operations in the monitored app. - - Allows drilling into a single operation to check all parts/dependencies that contribute to a long duration. - - Profiler can be invoked from here to collect performance traces on-demand. + * Shows performance details for different operations in the monitored app. + * Allows drilling into a single operation to check all parts/dependencies that contribute to a long duration. + * Profiler can be invoked from here to collect performance traces on-demand. -- [Azure Application Insights Profiler](/azure/azure-monitor/app/profiler) allows regular and on-demand profiling of .NET apps. Azure portal shows captured performance traces with call stacks and hot paths. The trace files can also be downloaded for deeper analysis using PerfView. +* [Azure Application Insights Profiler](/azure/azure-monitor/app/profiler) allows regular and on-demand profiling of .NET apps. Azure portal shows captured performance traces with call stacks and hot paths. The trace files can also be downloaded for deeper analysis using PerfView. Application Insights can be used in a variety of environments: -- Optimized to work in Azure. -- Works in production, development, and staging. -- Works locally from [Visual Studio](/azure/application-insights/app-insights-visual-studio) or in other hosting environments. +* Optimized to work in Azure. +* Works in production, development, and staging. +* Works locally from [Visual Studio](/azure/application-insights/app-insights-visual-studio) or in other hosting environments. For more information on code-based monitoring, see [Application Insights for ASP.NET Core](/azure/application-insights/app-insights-asp-net-core). For more information on codeless monitoring, see [Monitor Azure App Service performance](/azure/azure-monitor/app/azure-web-apps?tabs=netcore). @@ -65,6 +65,6 @@ More information about how to install and get started with PerfCollect is availa The following lists some third-party performance tools that are useful in performance investigation of .NET Core applications. -- [MiniProfiler](https://miniprofiler.com/) -- [dotTrace](https://www.jetbrains.com/profiler/) and [dotMemory](https://www.jetbrains.com/dotmemory/) from [JetBrains](https://www.jetbrains.com/) -- [VTune](https://software.intel.com/content/www/us/en/develop/tools/vtune-profiler.html) from Intel +* [MiniProfiler](https://miniprofiler.com/) +* [dotTrace](https://www.jetbrains.com/profiler/) and [dotMemory](https://www.jetbrains.com/dotmemory/) from [JetBrains](https://www.jetbrains.com/) +* [VTune](https://software.intel.com/content/www/us/en/develop/tools/vtune-profiler.html) from Intel diff --git a/aspnetcore/performance/rate-limit.md b/aspnetcore/performance/rate-limit.md index e7347659ab39..c0895054b735 100644 --- a/aspnetcore/performance/rate-limit.md +++ b/aspnetcore/performance/rate-limit.md @@ -23,12 +23,12 @@ For an introduction to rate limiting, see [Rate limiting middleware](https://blo Rate limiting can be used for managing the flow of incoming requests to an app. Key reasons to implement rate limiting: -- **Preventing Abuse**: Rate limiting helps protect an app from abuse by limiting the number of requests a user or client can make in a given time period. This is particularly important for public APIs. -- **Ensuring Fair Usage**: By setting limits, all users have fair access to resources, preventing users from monopolizing the system. -- **Protecting Resources**: Rate limiting helps prevent server overload by controlling the number of requests that can be processed, thus protecting the backend resources from being overwhelmed. -- **Enhancing Security**: It can mitigate the risk of Denial of Service (DoS) attacks by limiting the rate at which requests are processed, making it harder for attackers to flood a system. -- **Improving Performance**: By controlling the rate of incoming requests, optimal performance and responsiveness of an app can be maintained, ensuring a better user experience. -- **Cost Management**: For services that incur costs based on usage, rate limiting can help manage and predict expenses by controlling the volume of requests processed. +* **Preventing Abuse**: Rate limiting helps protect an app from abuse by limiting the number of requests a user or client can make in a given time period. This is particularly important for public APIs. +* **Ensuring Fair Usage**: By setting limits, all users have fair access to resources, preventing users from monopolizing the system. +* **Protecting Resources**: Rate limiting helps prevent server overload by controlling the number of requests that can be processed, thus protecting the backend resources from being overwhelmed. +* **Enhancing Security**: It can mitigate the risk of Denial of Service (DoS) attacks by limiting the rate at which requests are processed, making it harder for attackers to flood a system. +* **Improving Performance**: By controlling the rate of incoming requests, optimal performance and responsiveness of an app can be maintained, ensuring a better user experience. +* **Cost Management**: For services that incur costs based on usage, rate limiting can help manage and predict expenses by controlling the volume of requests processed. Implementing rate limiting in an ASP.NET Core app can help maintain stability, security, and performance, ensuring a reliable and efficient service for all users. @@ -38,11 +38,11 @@ While rate limiting can help mitigate the risk of Denial of Service (DoS) attack For robust DDoS protection, consider using a commercial DDoS protection service. These services offer advanced features such as: -- **Traffic Analysis**: Continuous monitoring and analysis of incoming traffic to detect and mitigate DDoS attacks in real-time. -- **Scalability**: The ability to handle large-scale attacks by distributing traffic across multiple servers and data centers. -- **Automated Mitigation**: Automated response mechanisms to quickly block malicious traffic without manual intervention. -- **Global Network**: A global network of servers to absorb and mitigate attacks closer to the source. -- **Constant Updates**: Commercial services continuously track and update their protection mechanisms to adapt to new and evolving threats. +* **Traffic Analysis**: Continuous monitoring and analysis of incoming traffic to detect and mitigate DDoS attacks in real-time. +* **Scalability**: The ability to handle large-scale attacks by distributing traffic across multiple servers and data centers. +* **Automated Mitigation**: Automated response mechanisms to quickly block malicious traffic without manual intervention. +* **Global Network**: A global network of servers to absorb and mitigate attacks closer to the source. +* **Constant Updates**: Commercial services continuously track and update their protection mechanisms to adapt to new and evolving threats. When using a cloud hosting service, DDoS protection is usually available as part of the hosting solution, such as [Azure Web Application Firewall](https://azure.microsoft.com/products/web-application-firewall/), [AWS Shield](https://aws.amazon.com/shield/) or [Google Cloud Armor](https://cloud.google.com/armor/docs). Dedicated protections are available as Web Application Firewalls (WAF) or as part of a CDN solution such as [Cloudflare](https://www.cloudflare.com/ddos/) or [Akamai Kona Site Defender](https://www.akamai.com/us/en/products/security/kona-site-defender.jsp) @@ -281,10 +281,11 @@ The following code uses the concurrency limiter: Rate limiting partitions divide the traffic into separate "buckets" that each get their own rate limit counters. This allows for more granular control than a single global counter. The partition "buckets" are defined by different keys (like user ID, IP address, or API key). ### Benefits of Partitioning -- **Fairness**: One user can't consume the entire rate limit for everyone -- **Granularity**: Different limits for different users/resources -- **Security**: Better protection against targeted abuse -- **Tiered Service**: Support for service tiers with different limits + +* **Fairness**: One user can't consume the entire rate limit for everyone +* **Granularity**: Different limits for different users/resources +* **Security**: Better protection against targeted abuse +* **Tiered Service**: Support for service tiers with different limits Partitioned rate limiting gives you fine-grained control over how you manage API traffic while ensuring fair resource allocation. diff --git a/aspnetcore/release-notes/aspnetcore-1.1.md b/aspnetcore/release-notes/aspnetcore-1.1.md index 02b42d996c20..e74f5791cc4a 100644 --- a/aspnetcore/release-notes/aspnetcore-1.1.md +++ b/aspnetcore/release-notes/aspnetcore-1.1.md @@ -11,16 +11,16 @@ uid: aspnetcore-1.1 ASP.NET Core 1.1 includes the following new features: -- [URL Rewriting Middleware](xref:fundamentals/url-rewriting) -- [Response Caching Middleware](xref:performance/caching/middleware) -- [View Components as Tag Helpers](xref:mvc/views/view-components#invoking-a-view-component-as-a-tag-helper) -- [Middleware as MVC filters](xref:mvc/controllers/filters#using-middleware-in-the-filter-pipeline) -- [Cookie-based TempData provider](xref:fundamentals/app-state#tempdata) -- [Azure App Service logging provider](xref:fundamentals/logging/index#azure-app-service) -- [Azure Key Vault configuration provider](xref:security/key-vault-configuration) -- [Azure and Redis Storage Data Protection Key Repositories](xref:security/data-protection/implementation/key-storage-providers) -- WebListener Server for Windows -- [WebSockets support](xref:fundamentals/websockets) +* [URL Rewriting Middleware](xref:fundamentals/url-rewriting) +* [Response Caching Middleware](xref:performance/caching/middleware) +* [View Components as Tag Helpers](xref:mvc/views/view-components#invoking-a-view-component-as-a-tag-helper) +* [Middleware as MVC filters](xref:mvc/controllers/filters#using-middleware-in-the-filter-pipeline) +* [Cookie-based TempData provider](xref:fundamentals/app-state#tempdata) +* [Azure App Service logging provider](xref:fundamentals/logging/index#azure-app-service) +* [Azure Key Vault configuration provider](xref:security/key-vault-configuration) +* [Azure and Redis Storage Data Protection Key Repositories](xref:security/data-protection/implementation/key-storage-providers) +* WebListener Server for Windows +* [WebSockets support](xref:fundamentals/websockets) ## Choosing between versions 1.0 and 1.1 of ASP.NET Core @@ -28,5 +28,5 @@ ASP.NET Core 1.1 has more features than ASP.NET Core 1.0. In general, we recomme ## Additional Information -- [ASP.NET Core 1.1.0 Release Notes](https://github.com/dotnet/aspnetcore/releases/tag/1.1.0) -- To connect with the ASP.NET Core development team's progress and plans, tune in to the [ASP.NET Community Standup](https://live.asp.net/). +* [ASP.NET Core 1.1.0 Release Notes](https://github.com/dotnet/aspnetcore/releases/tag/1.1.0) +* To connect with the ASP.NET Core development team's progress and plans, tune in to the [ASP.NET Community Standup](https://live.asp.net/). diff --git a/aspnetcore/release-notes/aspnetcore-10.0.md b/aspnetcore/release-notes/aspnetcore-10.0.md index cefb6b31014e..34ff2d5b6d08 100644 --- a/aspnetcore/release-notes/aspnetcore-10.0.md +++ b/aspnetcore/release-notes/aspnetcore-10.0.md @@ -57,14 +57,14 @@ This section describes new features for authentication and authorization. Metrics have been added for certain authentication and authorization events in ASP.NET Core. With this change, you can now obtain metrics for the following events: -- Authentication: - - Authenticated request duration - - Challenge count - - Forbid count - - Sign in count - - Sign out count -- Authorization: - - Count of requests requiring authorization +* Authentication: + * Authenticated request duration + * Challenge count + * Forbid count + * Sign in count + * Sign out count +* Authorization: + * Count of requests requiring authorization The following image shows an example of the Authenticated request duration metric in the Aspire dashboard: @@ -82,8 +82,8 @@ This section describes miscellaneous new features in ASP.NET Core 10.0. Use the new [`RedirectHttpResult.IsLocalUrl(url)`](https://source.dot.net/#Microsoft.AspNetCore.Http.Results/RedirectHttpResult.cs,c0ece2e6266cb369) helper method to detect if a URL is local. A URL is considered local if the following are true: -- It doesn't have the [host](https://developer.mozilla.org/docs/Web/API/URL/host) or [authority](https://developer.mozilla.org/docs/Web/URI/Authority) section. -- It has an [absolute path](https://developer.mozilla.org/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#absolute_urls_vs._relative_urls). +* It doesn't have the [host](https://developer.mozilla.org/docs/Web/API/URL/host) or [authority](https://developer.mozilla.org/docs/Web/URI/Authority) section. +* It has an [absolute path](https://developer.mozilla.org/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#absolute_urls_vs._relative_urls). URLs using [virtual paths](/previous-versions/aspnet/ms178116(v=vs.100)) `"~/"` are also local. diff --git a/aspnetcore/release-notes/aspnetcore-10/includes/OpenApiNetV2Prev7.md b/aspnetcore/release-notes/aspnetcore-10/includes/OpenApiNetV2Prev7.md index f256b0023300..35a71ddb4d3c 100644 --- a/aspnetcore/release-notes/aspnetcore-10/includes/OpenApiNetV2Prev7.md +++ b/aspnetcore/release-notes/aspnetcore-10/includes/OpenApiNetV2Prev7.md @@ -2,5 +2,5 @@ The [OpenAPI.NET](https://github.com/microsoft/OpenAPI.NET) library used in ASP.NET Core OpenAPI document generation has been upgraded to v2.0.0-preview7. This version includes various bug fixes and improvements while also introducing some breaking changes. The breaking changes should only impact users that use document, operation, or schema transformers. Breaking changes in this iteration include the following: -- Entities within the OpenAPI document, like operations and parameters, are typed as interfaces. Concrete implementations exist for the inlined and referenced variants of an entity. For example, an `IOpenApiSchema` can either be an inlined `OpenApiSchema` or an `OpenApiSchemaReference` that points to a schema defined elsewhere in the document. -- The `Nullable` property has been removed from the `OpenApiSchema` type. To determine if a type is nullable, evaluate if the `OpenApiSchema.Type` property sets `JsonSchemaType.Null`. \ No newline at end of file +* Entities within the OpenAPI document, like operations and parameters, are typed as interfaces. Concrete implementations exist for the inlined and referenced variants of an entity. For example, an `IOpenApiSchema` can either be an inlined `OpenApiSchema` or an `OpenApiSchemaReference` that points to a schema defined elsewhere in the document. +* The `Nullable` property has been removed from the `OpenApiSchema` type. To determine if a type is nullable, evaluate if the `OpenApiSchema.Type` property sets `JsonSchemaType.Null`. \ No newline at end of file diff --git a/aspnetcore/release-notes/aspnetcore-10/includes/openApi.md b/aspnetcore/release-notes/aspnetcore-10/includes/openApi.md index ce1fec36bd16..bae9c2b0957f 100644 --- a/aspnetcore/release-notes/aspnetcore-10/includes/openApi.md +++ b/aspnetcore/release-notes/aspnetcore-10/includes/openApi.md @@ -9,8 +9,8 @@ in particular with full support for [JSON Schema draft 2020-12]. Some of the changes you will see in the generated OpenAPI document include: -- Nullable types no longer have the `nullable: true` property in the schema. -- Instead of a `nullable: true` property, they have a `type` keyword whose value is an array that includes `null` as one of the types. +* Nullable types no longer have the `nullable: true` property in the schema. +* Instead of a `nullable: true` property, they have a `type` keyword whose value is an array that includes `null` as one of the types. With this feature, the default OpenAPI version for generated documents is`3.1`. The version can be changed by explicitly setting the [OpenApiVersion](/dotnet/api/microsoft.aspnetcore.openapi.openapioptions.openapiversion) property of the [OpenApiOptions](/dotnet/api/microsoft.aspnetcore.openapi.openapioptions) in the `configureOptions` delegate parameter of [AddOpenApi](/dotnet/api/microsoft.extensions.dependencyinjection.openapiservicecollectionextensions.addopenapi). @@ -73,7 +73,7 @@ app.MapOpenApi("/openapi/{documentName}.yaml"); Support for: -- YAML is currently only available for the the OpenAPI served from the OpenAPI endpoint. -- Generating OpenAPI documents in YAML format at build time is added in a future preview. +* YAML is currently only available for the the OpenAPI served from the OpenAPI endpoint. +* Generating OpenAPI documents in YAML format at build time is added in a future preview. See [this PR](https://github.com/dotnet/aspnetcore/pull/58616) which added support for serving the generated OpenAPI document in YAML format. diff --git a/aspnetcore/release-notes/aspnetcore-10/includes/testAppsTopLevel.md b/aspnetcore/release-notes/aspnetcore-10/includes/testAppsTopLevel.md index 5e14953d3b2a..0e3840a9f4d4 100644 --- a/aspnetcore/release-notes/aspnetcore-10/includes/testAppsTopLevel.md +++ b/aspnetcore/release-notes/aspnetcore-10/includes/testAppsTopLevel.md @@ -8,5 +8,5 @@ In .NET 10, a [source generator](/shows/on-dotnet/c-source-generators) is used t The following PRs contribited to this feature: -- [PR 58199](https://github.com/dotnet/aspnetcore/pull/58199) -- [PR 58482](https://github.com/dotnet/aspnetcore/pull/58482) +* [PR 58199](https://github.com/dotnet/aspnetcore/pull/58199) +* [PR 58482](https://github.com/dotnet/aspnetcore/pull/58482) diff --git a/aspnetcore/release-notes/aspnetcore-9/includes/debugger.md b/aspnetcore/release-notes/aspnetcore-9/includes/debugger.md index 596dbe8f6b2d..1a68362cd95d 100644 --- a/aspnetcore/release-notes/aspnetcore-9/includes/debugger.md +++ b/aspnetcore/release-notes/aspnetcore-9/includes/debugger.md @@ -12,10 +12,10 @@ After: ASP.NET Core has many key-value collections. This improved debugging experience applies to: -- HTTP headers -- Query strings -- Forms -- Cookies -- View data -- Route data -- Features +* HTTP headers +* Query strings +* Forms +* Cookies +* View data +* Route data +* Features diff --git a/aspnetcore/release-notes/aspnetcore-9/includes/improved-kestrel-connection-metrics.md b/aspnetcore/release-notes/aspnetcore-9/includes/improved-kestrel-connection-metrics.md index 50825eb9bba0..bedb67160b9b 100644 --- a/aspnetcore/release-notes/aspnetcore-9/includes/improved-kestrel-connection-metrics.md +++ b/aspnetcore/release-notes/aspnetcore-9/includes/improved-kestrel-connection-metrics.md @@ -4,10 +4,10 @@ We've made a significant improvement to Kestrel's connection metrics by includin Here is a small sample of the `error.type` values: -- `tls_handshake_failed` - The connection requires TLS, and the TLS handshake failed. -- `connection_reset` - The connection was unexpectedly closed by the client while requests were in progress. -- `request_headers_timeout` - Kestrel closed the connection because it didn't receive request headers in time. -- `max_request_body_size_exceeded` - Kestrel closed the connection because uploaded data exceeded max size. +* `tls_handshake_failed` - The connection requires TLS, and the TLS handshake failed. +* `connection_reset` - The connection was unexpectedly closed by the client while requests were in progress. +* `request_headers_timeout` - Kestrel closed the connection because it didn't receive request headers in time. +* `max_request_body_size_exceeded` - Kestrel closed the connection because uploaded data exceeded max size. Previously, diagnosing Kestrel connection issues required a server to record detailed, low-level logging. However, logs can be expensive to generate and store, and it can be difficult to find the right information among the noise. @@ -15,8 +15,8 @@ Metrics are a much cheaper alternative that can be left on in a production envir We expect improved connection metrics to be useful in many scenarios: -- Investigating performance issues caused by short connection lifetimes. -- Observing ongoing external attacks on Kestrel that impact performance and stability. -- Recording attempted external attacks on Kestrel that Kestrel's built-in security hardening prevented. +* Investigating performance issues caused by short connection lifetimes. +* Observing ongoing external attacks on Kestrel that impact performance and stability. +* Recording attempted external attacks on Kestrel that Kestrel's built-in security hardening prevented. For more information, see [ASP.NET Core metrics](/aspnet/core/log-mon/metrics/metrics). diff --git a/aspnetcore/release-notes/aspnetcore-9/includes/openApi.md b/aspnetcore/release-notes/aspnetcore-9/includes/openApi.md index 39b4ce66c00f..7bf88139a3ba 100644 --- a/aspnetcore/release-notes/aspnetcore-9/includes/openApi.md +++ b/aspnetcore/release-notes/aspnetcore-9/includes/openApi.md @@ -4,8 +4,8 @@ The [OpenAPI specification](https://www.openapis.org/) is a standard for describ The following highlighted code calls: -- `AddOpenApi` to register the required dependencies into the app's DI container. -- `MapOpenApi` to register the required OpenAPI endpoints in the app's routes. +* `AddOpenApi` to register the required dependencies into the app's DI container. +* `MapOpenApi` to register the required OpenAPI endpoints in the app's routes. :::code language="csharp" source="~/release-notes/aspnetcore-9/samples/OpenApiExample/Program.cs" highlight="3,7"::: diff --git a/aspnetcore/security/anti-request-forgery/samples/2.x/MvcSample/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md b/aspnetcore/security/anti-request-forgery/samples/2.x/MvcSample/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md index 66c3a2bb21a1..b51771ee9590 100644 --- a/aspnetcore/security/anti-request-forgery/samples/2.x/MvcSample/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md +++ b/aspnetcore/security/anti-request-forgery/samples/2.x/MvcSample/wwwroot/lib/bootstrap/ISSUE_TEMPLATE.md @@ -1,22 +1,22 @@ Before opening an issue: -- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) -- [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems -- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs -- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) +* [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) +* [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems +* Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs +* Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) When asking general "how to" questions: -- Please do not open an issue here -- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) +* Please do not open an issue here +* Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) When reporting a bug, include: -- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) -- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) -- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com) +* Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile) +* Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) +* Reduced test cases and potential fixes using [JS Bin](https://jsbin.com) When suggesting a feature, include: -- As much detail as possible for what we should add and why it's important to Bootstrap -- Relevant links to prior art, screenshots, or live demos whenever possible +* As much detail as possible for what we should add and why it's important to Bootstrap +* Relevant links to prior art, screenshots, or live demos whenever possible diff --git a/aspnetcore/security/authentication/azure-ad-b2c.md b/aspnetcore/security/authentication/azure-ad-b2c.md index a0a05e770682..06ad91656614 100644 --- a/aspnetcore/security/authentication/azure-ad-b2c.md +++ b/aspnetcore/security/authentication/azure-ad-b2c.md @@ -23,8 +23,8 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti ## Prerequisites -- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/dotnet). -- .NET SDK. [Install the latest .NET SDK](https://dotnet.microsoft.com/download/dotnet) for your platform. +* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/dotnet). +* .NET SDK. [Install the latest .NET SDK](https://dotnet.microsoft.com/download/dotnet) for your platform. ## Preparation @@ -53,8 +53,8 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti In the preceding: - - `Microsoft.Identity.Web` includes the basic set of dependencies for authenticating with the Microsoft identity platform. - - `Microsoft.Identity.Web.UI` includes UI functionality encapsulated in an area named `MicrosoftIdentity`. + * `Microsoft.Identity.Web` includes the basic set of dependencies for authenticating with the Microsoft identity platform. + * `Microsoft.Identity.Web.UI` includes UI functionality encapsulated in an area named `MicrosoftIdentity`. 1. Add an `AzureADB2C` object to `appsettings.json`. @@ -63,12 +63,12 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti :::code language="json" source="azure-ad-b2c/sample/appsettings-b2c-userflow.json" highlight="2-17"::: - - For **Domain**, use the domain of your Azure AD B2C tenant. - - For **ClientId**, use the **Application (client) ID** from the app registration you created in your tenant. - - For **Instance**, use the domain of your Azure AD B2C tenant. - - For **SignUpSignInPolicyId**, use the user flow policy defined in the Azure B2C tenant - - Use either the **ClientSecret** or the **ClientCertificates** configuration. ClientCertificates are recommended. - - Leave all other values as they are. + * For **Domain**, use the domain of your Azure AD B2C tenant. + * For **ClientId**, use the **Application (client) ID** from the app registration you created in your tenant. + * For **Instance**, use the domain of your Azure AD B2C tenant. + * For **SignUpSignInPolicyId**, use the user flow policy defined in the Azure B2C tenant + * Use either the **ClientSecret** or the **ClientCertificates** configuration. ClientCertificates are recommended. + * Leave all other values as they are. 1. In *Pages/Shared*, create a file named `_LoginPartial.cshtml`. Include the following code: @@ -76,9 +76,9 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti The preceding code: - - Checks if the user is authenticated. - - Renders a **Sign out** or **Sign in** link as appropriate. - - The link points to an action method on the `Account` controller in the `MicrosoftIdentity` area. + * Checks if the user is authenticated. + * Renders a **Sign out** or **Sign in** link as appropriate. + * The link points to an action method on the `Account` controller in the `MicrosoftIdentity` area. 1. In *Pages/Shared/_Layout.cshtml*, add the highlighted line within the `
` element: @@ -100,10 +100,10 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti In the preceding code: - - Calls to the `AddAuthentication` and `AddMicrosoftIdentityWebApp` methods configure the app to use Open ID Connect, specifically configured for the Microsoft identity platform. - - `AddAuthorization` initializes ASP.NET Core authorization. - - The `AddRazorPages` call configures the app so anonymous browsers can view the Index page. All other requests require authentication. - - `AddMvcOptions` and `AddMicrosoftIdentityUI` add the required UI components for redirecting to/from Azure AD B2C. + * Calls to the `AddAuthentication` and `AddMicrosoftIdentityWebApp` methods configure the app to use Open ID Connect, specifically configured for the Microsoft identity platform. + * `AddAuthorization` initializes ASP.NET Core authorization. + * The `AddRazorPages` call configures the app so anonymous browsers can view the Index page. All other requests require authentication. + * `AddMvcOptions` and `AddMicrosoftIdentityUI` add the required UI components for redirecting to/from Azure AD B2C. 1. Update the highlighted line to the `Configure` method: @@ -122,12 +122,12 @@ In this tutorial, you'll learn how to configure an ASP.NET Core app for authenti ``` 1. Browse to the app's secure endpoint, for example, `https://localhost:5001/`. - - The Index page renders with no authentication challenge. - - The header includes a **Sign in** link because you're not authenticated. + * The Index page renders with no authentication challenge. + * The header includes a **Sign in** link because you're not authenticated. 1. Select the **Privacy** link. - - The browser is redirected to your tenant's configured authentication method. - - After signing in, the header displays a welcome message and a **Sign out** link. + * The browser is redirected to your tenant's configured authentication method. + * After signing in, the header displays a welcome message and a **Sign out** link. ## Next steps diff --git a/aspnetcore/security/authentication/configure-jwt-bearer-authentication.md b/aspnetcore/security/authentication/configure-jwt-bearer-authentication.md index 9a6e60a9591f..14448dc57ef7 100644 --- a/aspnetcore/security/authentication/configure-jwt-bearer-authentication.md +++ b/aspnetcore/security/authentication/configure-jwt-bearer-authentication.md @@ -62,8 +62,8 @@ We recommend using delegated user access tokens whenever a user is involved. Dow Access tokens can be used as [bearer tokens](https://cloud.google.com/docs/authentication/token-types#bearer) or [sender-constrained tokens](https://docs.verify.ibm.com/ibm-security-verify-access/docs/tasks-certboundaccesstoken) to access resources. Sender-constrained tokens require the requesting client to prove possession of a private key to use the token. Proving possession of a private key guarantees the token can't be used independently. Sender-constrained tokens can be implemented in two ways: -- [Demonstrating Proof of Possession (DPoP)](https://datatracker.ietf.org/doc/html/rfc9449) -- [Mutual-TLS (MTLS)](https://datatracker.ietf.org/doc/html/rfc8705) +* [Demonstrating Proof of Possession (DPoP)](https://datatracker.ietf.org/doc/html/rfc9449) +* [Mutual-TLS (MTLS)](https://datatracker.ietf.org/doc/html/rfc8705) ### ID tokens diff --git a/aspnetcore/signalr/hubcontext.md b/aspnetcore/signalr/hubcontext.md index 5720e1579d36..47d9a8cbf404 100644 --- a/aspnetcore/signalr/hubcontext.md +++ b/aspnetcore/signalr/hubcontext.md @@ -54,11 +54,11 @@ app.Use(async (context, next) => > > Apps that need to map a user to the connection ID and persist that mapping can do one of the following: > -> - Persist mapping of single or multiple connections as groups. See [Groups in SignalR](xref:signalr/groups#groups-in-signalr) for more information. -> - Retain connection and user information through a singleton service. See [Inject services into a hub](xref:signalr/hubs#inject-services-into-a-hub) for more information. The singleton service can use any storage method, such as: -> - In-memory storage in a dictionary. -> - Permanent external storage. For example, a database or Azure Table storage using the [Azure.Data.Tables NuGet package](https://www.nuget.org/packages/Azure.Data.Tables/). -> - Pass the connection ID between clients. +> * Persist mapping of single or multiple connections as groups. See [Groups in SignalR](xref:signalr/groups#groups-in-signalr) for more information. +> * Retain connection and user information through a singleton service. See [Inject services into a hub](xref:signalr/hubs#inject-services-into-a-hub) for more information. The singleton service can use any storage method, such as: +> * In-memory storage in a dictionary. +> * Permanent external storage. For example, a database or Azure Table storage using the [Azure.Data.Tables NuGet package](https://www.nuget.org/packages/Azure.Data.Tables/). +> * Pass the connection ID between clients. ### Get an instance of `IHubContext` from IHost diff --git a/aspnetcore/signalr/swift-client.md b/aspnetcore/signalr/swift-client.md index 6280c47d8d74..d83a6a5a71cd 100644 --- a/aspnetcore/signalr/swift-client.md +++ b/aspnetcore/signalr/swift-client.md @@ -18,9 +18,9 @@ The SignalR Swift client library is delivered as a Swift package. You can add it ### Requirements -- Swift **>= 5.10** -- macOS **>= 11.0** -- iOS >= 14 +* Swift **>= 5.10** +* macOS **>= 11.0** +* iOS >= 14 ### Install with Swift Package Manager diff --git a/aspnetcore/web-api/http-repl/index.md b/aspnetcore/web-api/http-repl/index.md index 6759d4610cc6..64971e002cfb 100644 --- a/aspnetcore/web-api/http-repl/index.md +++ b/aspnetcore/web-api/http-repl/index.md @@ -387,12 +387,12 @@ pref set editor.command.default.arguments "--disable-extensions --new-window" By default, the HttpRepl has a set of relative paths that it uses to find the OpenAPI description when executing the `connect` command without the `--openapi` option. These relative paths are combined with the root and base paths specified in the `connect` command. The default relative paths are: -- `swagger.json` -- `swagger/v1/swagger.json` -- `/swagger.json` -- `/swagger/v1/swagger.json` -- `openapi.json` -- `/openapi.json` +* `swagger.json` +* `swagger/v1/swagger.json` +* `/swagger.json` +* `/swagger/v1/swagger.json` +* `openapi.json` +* `/openapi.json` To use a different set of search paths in your environment, set the `swagger.searchPaths` preference. The value must be a pipe-delimited list of relative paths. For example: diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod0.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod0.md index 3cc48d3b7ed0..1aeff3596045 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod0.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod0.md @@ -13,166 +13,166 @@ Welcome to what's new in the ASP.NET Core docs for June 2024. This article lists ### Updated articles -- - - QuickGrid display name support - - Scaffolding tool doc overhaul with added generators -- - - Document reserved event names - - Clarify interactive requirement for event handlers in BWAs -- - Downloading files with static SSR -- - - Mitigate overposting attacks - - BWA client-side validation requires a circuit -- - BWA client-side validation requires a circuit -- - - Prerendering behavior updates - - Interactive SSR RCs in global WASM/Auto projects - - Detect the current render mode at runtime -- - Blazor Server reconnection coverage -- - Map Static Assets Blazor-specific coverage -- - Update RemoteAuthenticatorView param value -- - - Place code for sample cross-link in MAUI project - - Article updates - - .NET MAUI BH BWA tutorial updates - - Update .NET MAUI BH BWA tutorial - - Clarify per-page/component scenario - - Patch the Pre5 .NET MAUI Blazor Hybrid BWA coverage (PR 2) - - Patch the Pre5 .NET MAUI Blazor Hybrid BWA coverage (PR 1) - - New .NET MAUI Blazor Hybrid template -- - Clarify Blazor trim mode -- - Blazor CLI commands moving to `dotnet watch` -- - Blazor CLI commands moving to `dotnet watch` -- - - Blazor CLI commands moving to `dotnet watch` - - Update Apache coverage (drop CentOS mentions) - - Fix spacing in Apache configuration example -- - Import-Export interop: collocated JS with RCL -- - Use 'reconnection UI' for all references -- - Interactive SSR RCs in global WASM/Auto projects -- - Simplified auth state serialization for BWAs -- - Change Tooling article content layout -- - - Blazor CLI commands moving to `dotnet watch` - - Blazor SignalR tutorial updates - - Blazor SignalR tutorial refactor +* + * QuickGrid display name support + * Scaffolding tool doc overhaul with added generators +* + * Document reserved event names + * Clarify interactive requirement for event handlers in BWAs +* - Downloading files with static SSR +* + * Mitigate overposting attacks + * BWA client-side validation requires a circuit +* - BWA client-side validation requires a circuit +* + * Prerendering behavior updates + * Interactive SSR RCs in global WASM/Auto projects + * Detect the current render mode at runtime +* - Blazor Server reconnection coverage +* - Map Static Assets Blazor-specific coverage +* - Update RemoteAuthenticatorView param value +* + * Place code for sample cross-link in MAUI project + * Article updates + * .NET MAUI BH BWA tutorial updates + * Update .NET MAUI BH BWA tutorial + * Clarify per-page/component scenario + * Patch the Pre5 .NET MAUI Blazor Hybrid BWA coverage (PR 2) + * Patch the Pre5 .NET MAUI Blazor Hybrid BWA coverage (PR 1) + * New .NET MAUI Blazor Hybrid template +* - Clarify Blazor trim mode +* - Blazor CLI commands moving to `dotnet watch` +* - Blazor CLI commands moving to `dotnet watch` +* + * Blazor CLI commands moving to `dotnet watch` + * Update Apache coverage (drop CentOS mentions) + * Fix spacing in Apache configuration example +* - Import-Export interop: collocated JS with RCL +* - Use 'reconnection UI' for all references +* - Interactive SSR RCs in global WASM/Auto projects +* - Simplified auth state serialization for BWAs +* - Change Tooling article content layout +* + * Blazor CLI commands moving to `dotnet watch` + * Blazor SignalR tutorial updates + * Blazor SignalR tutorial refactor ## Client-side development ### Updated articles -- - Package installation no longer needed -- - .NET JS interop article updates +* - Package installation no longer needed +* - .NET JS interop article updates ## Fundamentals ### Updated articles -- - Scaffolding tool doc overhaul with added generators -- - May Content Health - freshness review -- - Inline code --> snippet references -- - May Content Health - freshness review -- - moniker prep: +* - Scaffolding tool doc overhaul with added generators +* - May Content Health - freshness review +* - Inline code --> snippet references +* - May Content Health - freshness review +* - moniker prep: ## Getting started ### Updated articles -- - May Content Health - freshness review +* - May Content Health - freshness review ## gRPC ### Updated articles -- - Dispose gRPC streaming calls -- - Add gRPC perf docs around gracefully completing and disposing streaming calls +* - Dispose gRPC streaming calls +* - Add gRPC perf docs around gracefully completing and disposing streaming calls ## Hosting and deployment ### New articles -- +* ### Updated articles -- - - Revert "refactor azure troubleshooting/1" - - Update index.md -- - Revert "refactor azure troubleshooting/1" +* + * Revert "refactor azure troubleshooting/1" + * Update index.md +* - Revert "refactor azure troubleshooting/1" ## Migration ### Updated articles -- - Follow-up .NET 8 updates +* - Follow-up .NET 8 updates ## Mobile development ### Updated articles -- - Lowercase the code name +* - Lowercase the code name ## Performance ### Updated articles -- - Add serialization sample app -- - Note about code sample +* - Add serialization sample app +* - Note about code sample ## Release notes ### Updated articles -- - - Render mode detection, static web asset delivery, dynamic compression - - Add three Blazor What's New sections +* + * Render mode detection, static web asset delivery, dynamic compression + * Add three Blazor What's New sections ## Security ### Updated articles -- - Fix broken links -- - May Content Health - freshness review -- - Scaffolding tool doc overhaul with added generators +* - Fix broken links +* - May Content Health - freshness review +* - Scaffolding tool doc overhaul with added generators ## Testing ### Updated articles -- - - refactor azure troubleshooting/1 +* + * refactor azure troubleshooting/1 ## Tutorials ### Updated articles -- - mon split -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - .NET 9 update: Prep RP tutorial series -- - First MVC: Validation: Clear old null values -- - - v9 Update: Min Web API Tutorial - - Prework-Min Web API .NET 9 update -- - .NET 9 update: Prep RP tutorial series +* - mon split +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - .NET 9 update: Prep RP tutorial series +* - First MVC: Validation: Clear old null values +* + * v9 Update: Min Web API Tutorial + * Prework-Min Web API .NET 9 update +* - .NET 9 update: Prep RP tutorial series ## Web API ### Updated articles -- - May Content Health - freshness review +* - May Content Health - freshness review ## Community contributors The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [hakenr](https://github.com/hakenr) - Robert Haken ![5 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-5-green) -- [aidmsu](https://github.com/aidmsu) - Andrey Dorokhov ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [DickBaker](https://github.com/DickBaker) - Dick Baker ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Marjani](https://github.com/Marjani) - AmirHossein ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [saborrie](https://github.com/saborrie) - Steven Borrie ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [waedi](https://github.com/waedi) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [hakenr](https://github.com/hakenr) - Robert Haken ![5 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-5-green) +* [aidmsu](https://github.com/aidmsu) - Andrey Dorokhov ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [DickBaker](https://github.com/DickBaker) - Dick Baker ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [Marjani](https://github.com/Marjani) - AmirHossein ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [saborrie](https://github.com/saborrie) - Steven Borrie ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [waedi](https://github.com/waedi) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod1.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod1.md index 37021bb58914..e5da4d512000 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod1.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod1.md @@ -13,127 +13,127 @@ Welcome to what's new in the ASP.NET Core docs for January 2024. This article li ### New articles -- +* ### Updated articles -- +* - Blazor 8.0 content updates - Cascading values updates - Move example code to sample apps -- +* - Blazor 8.0 content updates - Add component example -- +* - Blazor 8.0 content updates - Prerendering and interactive/enhanced routing - Move example code to sample apps -- +* - Blazor 8.0 content updates - Clarification on prerendering and root components - Fine control of static SSR - Clarify Auto render mode behavior - Apply a render mode programmatically section - Client services during prerendering -- +* - Blazor 8.0 content updates - Content follow-up updates (8.0) - "Base address" clarifications for `HttpClient` -- +* - Blazor 8.0 content updates - Custom Blazor WASM loading progress indicator -- +* - Blazor 8.0 content updates - Improve auth state provider guidance - Add Identity BWA template cross-links -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) - Groups/roles article and Graph article updates -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Content follow-up updates (8.0) -- - Add troubleshooting guidance -- +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Content follow-up updates (8.0) +* - Add troubleshooting guidance +* - Groups/roles article and Graph article updates - "Base address" clarifications for `HttpClient` -- +* - "Base address" clarifications for `HttpClient` - Client services during prerendering -- - "Base address" clarifications for `HttpClient` -- - "Base address" clarifications for `HttpClient` -- +* - "Base address" clarifications for `HttpClient` +* - "Base address" clarifications for `HttpClient` +* - "Base address" clarifications for `HttpClient` - Update save app state example -- - Terminology updates -- - Update PWA guidance -- - Clarify 'content items' (placeholder content) -- - Cascading values updates -- +* - Terminology updates +* - Update PWA guidance +* - Clarify 'content items' (placeholder content) +* - Cascading values updates +* - Calling base class methods - Account conf and PW recovery article -- +* - Calling base class methods - Move example code to sample apps -- +* - Integration article updates - RazorComponentResult rendering behavior -- +* - Manage InputSelect form options for SSR - Move example code to sample apps -- +* - Blazor CRUD/Quickgrid scaffolder - Move example code to sample apps -- - Trimming complex framework types (JS interop) -- - Clarify lazy loading is only for dev assemblies -- - App base path enhancements -- - Client services during prerendering -- - Move example code to sample apps -- - Move example code to sample apps -- - Move example code to sample apps -- - Prerendering and interactive/enhanced routing -- - Update JS collocation guidance -- - Custom Blazor WASM loading progress indicator +* - Trimming complex framework types (JS interop) +* - Clarify lazy loading is only for dev assemblies +* - App base path enhancements +* - Client services during prerendering +* - Move example code to sample apps +* - Move example code to sample apps +* - Move example code to sample apps +* - Prerendering and interactive/enhanced routing +* - Update JS collocation guidance +* - Custom Blazor WASM loading progress indicator ## Client-side development ### Updated articles -- - libMan limitations /8 +* - libMan limitations /8 ## Fundamentals ### Updated articles -- +* - Update env var name - Fix default value of PreferHostingUrls -- - Fix default value of PreferHostingUrls -- - CreateSimBuilder is missing /7 +* - Fix default value of PreferHostingUrls +* - CreateSimBuilder is missing /7 ## gRPC ### New articles -- +* ### Updated articles -- - Add note to IPC docs that it can't be combined with some channel features -- - Add note to IPC docs that it can't be combined with some channel features +* - Add note to IPC docs that it can't be combined with some channel features +* - Add note to IPC docs that it can't be combined with some channel features ## Hosting and deployment ### Updated articles -- - Update doc author note -- +* - Update doc author note +* - DelegateHealthCheck /8 - sample prep /8 @@ -141,19 +141,19 @@ Welcome to what's new in the ASP.NET Core docs for January 2024. This article li ### Updated articles -- - Drop `[Parameter]` for query string params +* - Drop `[Parameter]` for query string params ## Performance ### Updated articles -- - Add Azure Cosmos DB +* - Add Azure Cosmos DB ## Release notes ### Updated articles -- +* - Add a note about certificate file watching - Drop `[Parameter]` for query string params @@ -161,49 +161,49 @@ Welcome to what's new in the ASP.NET Core docs for January 2024. This article li ### Updated articles -- +* - Duplicate new section in the >6.0 moniker block - Updated app-secrets.md to show how to use user secrets in a console app -- - Update env var name -- - Account conf and PW recovery article -- - Move prior version include to end +* - Update env var name +* - Account conf and PW recovery article +* - Move prior version include to end ## SignalR ### Updated articles -- - GH27996 - SignalR/hubs.md versioning to includes prework +* - GH27996 - SignalR/hubs.md versioning to includes prework ## Testing ### Updated articles -- - Add secret handling and special variables to .http files doc -- - Add example with endpoints to middleware testing doc +* - Add secret handling and special variables to .http files doc +* - Add example with endpoints to middleware testing doc ## Tutorials ### Updated articles -- - Update getting-started-with-swashbuckle.md +* - Update getting-started-with-swashbuckle.md ## Community contributors The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [ericmutta](https://github.com/ericmutta) - Eric Mutta ![7 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-7-green) -- [PSCourtney](https://github.com/PSCourtney) - Piers Courtney ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [Elanis](https://github.com/Elanis) - Axel ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [harry1911](https://github.com/harry1911) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [jposert](https://github.com/jposert) - Jakub ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [mahdikshk](https://github.com/mahdikshk) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [martincostello](https://github.com/martincostello) - Martin Costello ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [mganss](https://github.com/mganss) - Michael Ganss ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Nitzantomer1998](https://github.com/Nitzantomer1998) - Nitzan Tomer ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [ptakpiotr](https://github.com/ptakpiotr) - Piotr Ptak ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [richstokoe](https://github.com/richstokoe) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [roxas0zero](https://github.com/roxas0zero) - Abdullah Hashim ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [serpent5](https://github.com/serpent5) - Kirk Larkin ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [steenbokdev](https://github.com/steenbokdev) - Lars ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Ususucsus](https://github.com/Ususucsus) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [yogyogi](https://github.com/yogyogi) - Yogi ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [ericmutta](https://github.com/ericmutta) - Eric Mutta ![7 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-7-green) +* [PSCourtney](https://github.com/PSCourtney) - Piers Courtney ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [Elanis](https://github.com/Elanis) - Axel ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [harry1911](https://github.com/harry1911) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [jposert](https://github.com/jposert) - Jakub ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [mahdikshk](https://github.com/mahdikshk) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [martincostello](https://github.com/martincostello) - Martin Costello ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [mganss](https://github.com/mganss) - Michael Ganss ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [Nitzantomer1998](https://github.com/Nitzantomer1998) - Nitzan Tomer ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [ptakpiotr](https://github.com/ptakpiotr) - Piotr Ptak ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [richstokoe](https://github.com/richstokoe) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [roxas0zero](https://github.com/roxas0zero) - Abdullah Hashim ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [serpent5](https://github.com/serpent5) - Kirk Larkin ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [steenbokdev](https://github.com/steenbokdev) - Lars ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [Ususucsus](https://github.com/Ususucsus) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [yogyogi](https://github.com/yogyogi) - Yogi ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod2.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod2.md index 9ed524806f4d..294f769414e0 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod2.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod2.md @@ -16,110 +16,110 @@ Welcome to what's new in the ASP.NET Core docs for February 2024. This article l ### New articles -- +* ### Updated articles -- +* - Blazor troubleshooting guidance updates - Redirect to the home page - Blazor Web App with OIDC article -- - Add QuickGrid API cross-links -- +* - Add QuickGrid API cross-links +* - Ctor service injection - Services via the top-level imports file - Clarify "subset" of .NET API remark - Transient "disposable" service language updates - Cross-link (don't show) example code - Update transient services guidance -- +* - Move handle errors section - Lifecycle methods call ordering -- +* - Move handle errors section - Blazor Synchronization contxt - draw sample code -- +* - Move handle errors section - Update DispatchExceptionAsync example - Update render mode guidance for error boundaries -- - Update deep linking guidance -- - Inline form updates for conventions -- - Inline form updates for conventions -- +* - Update deep linking guidance +* - Inline form updates for conventions +* - Inline form updates for conventions +* - Inline form updates for conventions - Routing - use @key in NavLink loop warning (instead of NavLink href) - Avoid referring to components or RenderFragment parameters as "tags" -- - Inline form updates for conventions -- - Services via the top-level imports file -- +* - Inline form updates for conventions +* - Services via the top-level imports file +* - Update component ref text and examples - Update Route params section -- - Update Todo component -- +* - Update Todo component +* - Add WebAssembly (runtime) startup callbacks - Blazor Startup - sample environment variable name - Startup - manually start Standalone Blazor WebAssembly -- - Add roles and test user guidance -- - [Blazor] SignalR - remove "using System" reminder -- - Update 'Blazor Server' references -- +* - Add roles and test user guidance +* - [Blazor] SignalR - remove "using System" reminder +* - Update 'Blazor Server' references +* - Update "ASP.NET Core" references - Clarify "subset" of .NET API remark -- - Clarify "subset" of .NET API remark -- - Improve Blazor Environments article -- - Include a VSC path for resource files -- - Offline discussion updates for 8.0 -- - Offline discussion updates for 8.0 -- - Offline discussion updates for 8.0 -- - Offline discussion updates for 8.0 -- - Offline discussion updates for 8.0 -- - Revise built-in components list -- - Revise built-in components list -- +* - Clarify "subset" of .NET API remark +* - Improve Blazor Environments article +* - Include a VSC path for resource files +* - Offline discussion updates for 8.0 +* - Offline discussion updates for 8.0 +* - Offline discussion updates for 8.0 +* - Offline discussion updates for 8.0 +* - Offline discussion updates for 8.0 +* - Revise built-in components list +* - Revise built-in components list +* - Add a remarks on ClaimsPrincipal use - Avoid referring to components or RenderFragment parameters as "tags" -- +* - Debugging article updates - Final round of debugging updates - Debug article follow-up 8.0 -- - Document Static Web Asset Project Mode +* - Document Static Web Asset Project Mode ## Client-side development ### Updated articles -- - Moniker prep +* - Moniker prep ## Fundamentals ### Updated articles -- - Middleware in Minimal API: Add links -- - Update to Native capitalization -- - Update to Native capitalization -- - Update to Native capitalization -- - filters -- - Remove generic host -- - RouteDataRequestCultureProvider /8 +* - Middleware in Minimal API: Add links +* - Update to Native capitalization +* - Update to Native capitalization +* - Update to Native capitalization +* - filters +* - Remove generic host +* - RouteDataRequestCultureProvider /8 ## gRPC ### Updated articles -- - Update to Native capitalization +* - Update to Native capitalization ## Migration ### New articles -- +* ### Updated articles -- +* - Add step to hosted Blazor WASM migration guidance - Update hosted WASM-to-BWA guidance -- +* - migration to 9 - Blazor What's New guidance @@ -127,43 +127,43 @@ Welcome to what's new in the ASP.NET Core docs for February 2024. This article l ### Updated articles -- - Update rate-limit.md +* - Update rate-limit.md ## Razor Pages ### Updated articles -- - RCL, adding static web assets +* - RCL, adding static web assets ## Release notes ### New articles -- +* ### Updated articles -- +* - .NET 9 Preview 1 - Blazor What's New guidance - What's new in ASP.NET Core 9.0 stub -- - Update to Native capitalization +* - Update to Native capitalization ## Security ### Updated articles -- - Manually set assembly info attribute -- - Note that Entra External ID tenants also use SingleOrg for --auth option -- - Blazor Web App with OIDC article -- - Add ChainTrustValidationMode and CustomTrustStore properties to certauth.md +* - Manually set assembly info attribute +* - Note that Entra External ID tenants also use SingleOrg for --auth option +* - Blazor Web App with OIDC article +* - Add ChainTrustValidationMode and CustomTrustStore properties to certauth.md ## SignalR ### Updated articles -- - SignaR Security: Point to customizing CORS middleware -- +* - SignaR Security: Point to customizing CORS middleware +* - SignalR Redis Backplane update and fix - SignalR: Redis Backplane: Change to include versioning @@ -171,7 +171,7 @@ Welcome to what's new in the ASP.NET Core docs for February 2024. This article l ### Updated articles -- +* - remove deprecated ISystemClock - Explain integration test WebHostBuilderSection @@ -179,39 +179,39 @@ Welcome to what's new in the ASP.NET Core docs for February 2024. This article l ### Updated articles -- - Min Web API tutorial: Remove prerelease for packages -- - VSC improvements for Razor Pages and MVC Tutorials -- - VSC improvements for Razor Pages and MVC Tutorials -- - VSC improvements for Razor Pages and MVC Tutorials -- - VSC improvements for Razor Pages and MVC Tutorials -- - VSC improvements for Razor Pages and MVC Tutorials -- - VSC improvements for Razor Pages and MVC Tutorials -- - Update getting-started-with-swashbuckle.md -- +* - Min Web API tutorial: Remove prerelease for packages +* - VSC improvements for Razor Pages and MVC Tutorials +* - VSC improvements for Razor Pages and MVC Tutorials +* - VSC improvements for Razor Pages and MVC Tutorials +* - VSC improvements for Razor Pages and MVC Tutorials +* - VSC improvements for Razor Pages and MVC Tutorials +* - VSC improvements for Razor Pages and MVC Tutorials +* - Update getting-started-with-swashbuckle.md +* - Improve description of the UseSwaggerUI method - Update getting-started-with-swashbuckle.md -- +* - Razor Pages Get Started: Fix VS Code and MacOS explanation for Up - edit validation.md: use `dotnet ef database update` in Visual Studio Code section. Use `Update-Database` in Visual Studio section -- - edit search.md: in Note that describes LINQ Contains and SQLite case (in)sensitivity, include links in the Note instead of outside +* - edit search.md: in Note that describes LINQ Contains and SQLite case (in)sensitivity, include links in the Note instead of outside ## Community contributors The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [hakenr](https://github.com/hakenr) - Robert Haken ![17 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-17-green) -- [stanimirovv](https://github.com/stanimirovv) - Zlatin Stanimirov ![6 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-6-green) -- [yogyogi](https://github.com/yogyogi) - Yogi ![4 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-4-green) -- [zipperer](https://github.com/zipperer) - Andrew Zipperer ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) -- [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [0xced](https://github.com/0xced) - Cédric Luthi ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [andrerom](https://github.com/andrerom) - André R. ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [aterbo](https://github.com/aterbo) - aterbo ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Burke-Chris](https://github.com/Burke-Chris) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [CadeMH](https://github.com/CadeMH) - Cade ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [damienbod](https://github.com/damienbod) - damienbod ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [edwardneal](https://github.com/edwardneal) - Edward Neal ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [ilmalte](https://github.com/ilmalte) - Daniele Maltese ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [jufa2401](https://github.com/jufa2401) - Justin Fabricius ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [StormPooper](https://github.com/StormPooper) - Daniel Smith ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [thabaum](https://github.com/thabaum) - Cody ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [hakenr](https://github.com/hakenr) - Robert Haken ![17 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-17-green) +* [stanimirovv](https://github.com/stanimirovv) - Zlatin Stanimirov ![6 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-6-green) +* [yogyogi](https://github.com/yogyogi) - Yogi ![4 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-4-green) +* [zipperer](https://github.com/zipperer) - Andrew Zipperer ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) +* [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [0xced](https://github.com/0xced) - Cédric Luthi ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [andrerom](https://github.com/andrerom) - André R. ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [aterbo](https://github.com/aterbo) - aterbo ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [Burke-Chris](https://github.com/Burke-Chris) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [CadeMH](https://github.com/CadeMH) - Cade ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [damienbod](https://github.com/damienbod) - damienbod ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [edwardneal](https://github.com/edwardneal) - Edward Neal ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [ilmalte](https://github.com/ilmalte) - Daniele Maltese ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [jufa2401](https://github.com/jufa2401) - Justin Fabricius ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [StormPooper](https://github.com/StormPooper) - Daniel Smith ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [thabaum](https://github.com/thabaum) - Cody ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod3.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod3.md index ef2bd944d5ac..21945027faa1 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod3.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod3.md @@ -13,142 +13,142 @@ Welcome to what's new in the ASP.NET Core docs for March 2024. This article list ### Updated articles -- - Update Azure SignalR Service remarks -- - - Improve authorization opening remarks - - Add coverage on antiforgery services and middleware - - Server-side behaviors during static SSR - - WebSocket compression/CSP and security guidance - - WASM+Identity same-site & antiforgery updates -- - - Updates to compression warning content - - Surface warning on compression for interactive SSR -- - - Add remark on ME-ID authority in server API config - - Update scope/authority guidance in BWA+OIDC article - - Add VS prerequisite version - - Nonce update for token refresh -- - Add coverage on antiforgery services and middleware -- - Control content and migration updates -- - - Clarify app settings file locations - - Remove article front matter -- - Improved Project Structure article WASM headings -- - - [Blazor] Lifecycle - AfterRender.razor sample update + console output added - - Graph scopes clarification and addl updates - - [Blazor] Lifecycle - clear formulation for conditions when rendering is avoided -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Graph scopes clarification and addl updates -- - Add sample app cross-links to JS/SPA article -- - - [Blazor] Event handling - ParentChild2.razor without Task.Yield() - - [Blazor] Event handling - first InvokeAsync example with args -- - Dependency on DBContext for Blazor Identity UI -- - - Updates to 'click'-based remarks - - Server-side behaviors during static SSR - - WebSocket compression/CSP and security guidance -- - Static files article updates -- - - Harden API options - - Improve SignalR idle timeout example - - Update Blazor release notes for Preview 2 - - WebSocket compression/CSP and security guidance -- - Server-side behaviors during static SSR -- - Server-side behaviors during static SSR -- - Temporarily surface PU issue for access tokens -- - - Blazor WASM cookie security for web APIs - - PATCH section and other updates - - Drop prop and field in examples - - Call (web) API security updates - - Additional Call web API article updates - - Call web API article updates - - Drop pivots and sample code -- - Add Bootstrap to Blazor Hybrid tutorials -- - [Blazor] OverridingParameters - ShowMoreExpander, ToggleExpander -- - - Blazor-specific 'how to download' guidance - - Clarify sample location - - Remove article front matter -- - Blazor-specific 'how to download' guidance -- - Blazor-specific 'how to download' guidance -- - Blazor - data-binding - event fix -- - WebSocket compression/CSP and security guidance -- - Add BWA global Auto approach -- - WASM+Identity same-site & antiforgery updates +* - Update Azure SignalR Service remarks +* + * Improve authorization opening remarks + * Add coverage on antiforgery services and middleware + * Server-side behaviors during static SSR + * WebSocket compression/CSP and security guidance + * WASM+Identity same-site & antiforgery updates +* + * Updates to compression warning content + * Surface warning on compression for interactive SSR +* + * Add remark on ME-ID authority in server API config + * Update scope/authority guidance in BWA+OIDC article + * Add VS prerequisite version + * Nonce update for token refresh +* - Add coverage on antiforgery services and middleware +* - Control content and migration updates +* + * Clarify app settings file locations + * Remove article front matter +* - Improved Project Structure article WASM headings +* + * [Blazor] Lifecycle - AfterRender.razor sample update + console output added + * Graph scopes clarification and addl updates + * [Blazor] Lifecycle - clear formulation for conditions when rendering is avoided +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Graph scopes clarification and addl updates +* - Add sample app cross-links to JS/SPA article +* + * [Blazor] Event handling - ParentChild2.razor without Task.Yield() + * [Blazor] Event handling - first InvokeAsync example with args +* - Dependency on DBContext for Blazor Identity UI +* + * Updates to 'click'-based remarks + * Server-side behaviors during static SSR + * WebSocket compression/CSP and security guidance +* - Static files article updates +* + * Harden API options + * Improve SignalR idle timeout example + * Update Blazor release notes for Preview 2 + * WebSocket compression/CSP and security guidance +* - Server-side behaviors during static SSR +* - Server-side behaviors during static SSR +* - Temporarily surface PU issue for access tokens +* + * Blazor WASM cookie security for web APIs + * PATCH section and other updates + * Drop prop and field in examples + * Call (web) API security updates + * Additional Call web API article updates + * Call web API article updates + * Drop pivots and sample code +* - Add Bootstrap to Blazor Hybrid tutorials +* - [Blazor] OverridingParameters - ShowMoreExpander, ToggleExpander +* + * Blazor-specific 'how to download' guidance + * Clarify sample location + * Remove article front matter +* - Blazor-specific 'how to download' guidance +* - Blazor-specific 'how to download' guidance +* - Blazor - data-binding - event fix +* - WebSocket compression/CSP and security guidance +* - Add BWA global Auto approach +* - WASM+Identity same-site & antiforgery updates ## Fundamentals ### Updated articles -- - Fix typo -- - Update index.md +* - Fix typo +* - Update index.md ## Migration ### New articles -- +* ### Updated articles -- - - Add coverage on antiforgery services and middleware - - Control content and migration updates - - Blazor Server script fallback policy authorization -- - - move snippets to code sample - - Add doc for incrementally migration IHttpModule implementations +* + * Add coverage on antiforgery services and middleware + * Control content and migration updates + * Blazor Server script fallback policy authorization +* + * move snippets to code sample + * Add doc for incrementally migration IHttpModule implementations ## Performance ### Updated articles -- - Update API Testing tool references +* - Update API Testing tool references ## Release notes ### Updated articles -- - Add preview 2 features +* - Add preview 2 features ## Security ### Updated articles -- - Convert inline code to snippet references +* - Convert inline code to snippet references ## Tutorials ### Updated articles -- - Min API tutorial: rewrite to Swagger +* - Min API tutorial: rewrite to Swagger ## Web API ### Updated articles -- - Update API Testing tool references +* - Update API Testing tool references ## Community contributors The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [hakenr](https://github.com/hakenr) - Robert Haken ![21 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-21-green) -- [BusHero](https://github.com/BusHero) - Cervac Petru ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [danespinosa](https://github.com/danespinosa) - Dan Espinosa ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [drewnoakes](https://github.com/drewnoakes) - Drew Noakes ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [fbaptista](https://github.com/fbaptista) - Fabian ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [fredrikcarlbom](https://github.com/fredrikcarlbom) - Fredrik C ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Jessuhh](https://github.com/Jessuhh) - Jesse Brand ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [markharwood101](https://github.com/markharwood101) - Mark Harwood ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [reyang](https://github.com/reyang) - Reiley Yang ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [StefanOssendorf](https://github.com/StefanOssendorf) - Stefan Ossendorf ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [hakenr](https://github.com/hakenr) - Robert Haken ![21 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-21-green) +* [BusHero](https://github.com/BusHero) - Cervac Petru ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [danespinosa](https://github.com/danespinosa) - Dan Espinosa ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [drewnoakes](https://github.com/drewnoakes) - Drew Noakes ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [fbaptista](https://github.com/fbaptista) - Fabian ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [fredrikcarlbom](https://github.com/fredrikcarlbom) - Fredrik C ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [Jessuhh](https://github.com/Jessuhh) - Jesse Brand ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [markharwood101](https://github.com/markharwood101) - Mark Harwood ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [reyang](https://github.com/reyang) - Reiley Yang ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [StefanOssendorf](https://github.com/StefanOssendorf) - Stefan Ossendorf ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod4.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod4.md index 09dd8756e895..b3a3fdf75ef9 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod4.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod4.md @@ -13,123 +13,123 @@ Welcome to what's new in the ASP.NET Core docs for April 2024. This article list ### New articles -- -- -- -- +* +* +* +* ### Updated articles -- - Update QuickGrid guidance -- - Improve guidance on security config with app settings files -- +* - Update QuickGrid guidance +* - Improve guidance on security config with app settings files +* - Clear forms and fields - Improve @formname coverage -- - [Blazor] Globalization & localization - correct async JS interop -- - Blazor WASM build tools + AOT article -- - QR code generation article for BWAs -- - [Blazor] Logging - comments for "magic numbers" -- - Guidance on dynamic NavLink generation -- +* - [Blazor] Globalization & localization - correct async JS interop +* - Blazor WASM build tools + AOT article +* - QR code generation article for BWAs +* - [Blazor] Logging - comments for "magic numbers" +* - Guidance on dynamic NavLink generation +* - Revise content on the reconnection UI delay - Improve SignalR connection guidance -- - [Blazor] Templated components - TemplatedNavBar + keyed TableTemplate -- - Blazor WASM build tools + AOT article -- - Generic type article improvements -- +* - [Blazor] Templated components - TemplatedNavBar + keyed TableTemplate +* - Blazor WASM build tools + AOT article +* - Generic type article improvements +* - Improve lifecycle method remarks - Revise setting parameters lifecycle remarks - Improve `SetParametersAsync` base method coverage -- - [Blazor] Virtualization - data slicing clarification -- +* - [Blazor] Virtualization - data slicing clarification +* - Clarify conditional HTML element attributes - Distinguish Razor components -- - Dedicated article on JS location -- - Dedicated article on JS location -- - Add Debugger support section -- - [Blazor] DynamicComponents - fixes samples vulnerability + related adjustments -- +* - Dedicated article on JS location +* - Dedicated article on JS location +* - Add Debugger support section +* - [Blazor] DynamicComponents - fixes samples vulnerability + related adjustments +* - Blazor WASM build tools + AOT article - WASM runtime max heap size -- +* - Improve IIS crosslinking and additional deployment updates - Blazor WASM build tools + AOT article - Memory management updates - Improve SignalR connection guidance -- - Add additional scope guidance -- +* - Add additional scope guidance +* - OIDC Blazor authentication text improvements - Clarify use of IHttpContextAccessor/HttpContext -- - Shorten class name +* - Shorten class name ## Fundamentals ### Updated articles -- - .NET 9 endpoint metadata on error handling page -- +* - .NET 9 endpoint metadata on error handling page +* - .NET 9 moniker prep for 500 status code TypedResults - Update not-latest and not-current include files - .NET 9 new feature - Internal Server Error TypedResults on Responses page -- - Update not-latest and not-current include files -- +* - Update not-latest and not-current include files +* - No swag - Mon prep -- - fix RDG highlights after code samples update -- - Refresh my top 10 topics: WebSockets +* - fix RDG highlights after code samples update +* - Refresh my top 10 topics: WebSockets ## gRPC ### Updated articles -- - Add docs for WinHttpHandler and multiple connections -- - Test gRPC: Update API test Tooling +* - Add docs for WinHttpHandler and multiple connections +* - Test gRPC: Update API test Tooling ## Hosting and deployment ### Updated articles -- - Fix documentation about how X-Original-* headers are populated +* - Fix documentation about how X-Original-* headers are populated ## Mobile development ### Updated articles -- - Native Mobile Backend. +* - Native Mobile Backend. ## MVC ### Updated articles -- - Update API test tool: Custom Model Binding -- - Improve @formname coverage -- - fix highlight and style in snippets +* - Update API test tool: Custom Model Binding +* - Improve @formname coverage +* - fix highlight and style in snippets ## Release notes ### Updated articles -- - .NET 9 - endpoint metadata on what's new +* - .NET 9 - endpoint metadata on what's new ## Security ### Updated articles -- - QR code generation article for BWAs -- - Moniker prep for .NET 9 content +* - QR code generation article for BWAs +* - Moniker prep for .NET 9 content ## SignalR ### Updated articles -- - SignalR: Clarify groups +* - SignalR: Clarify groups ## Tutorials ### Updated articles -- - WebAPI MongoDB: Clarify steps -- +* - WebAPI MongoDB: Clarify steps +* - Swagger Update: web-api-help-pages: Sample fix - fix Swag - Doc With Swagger: Enable only in dev env @@ -138,13 +138,13 @@ Welcome to what's new in the ASP.NET Core docs for April 2024. This article list The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [hakenr](https://github.com/hakenr) - Robert Haken ![10 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-10-green) -- [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![5 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-5-green) -- [damienbod](https://github.com/damienbod) - damienbod ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [sousadiego11](https://github.com/sousadiego11) - Diego Sousa ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [andriibratanin](https://github.com/andriibratanin) - Andrii Bratanin ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [ceddy4395](https://github.com/ceddy4395) - Cedric ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [joegoldman2](https://github.com/joegoldman2) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [ndc](https://github.com/ndc) - Endy Tjahjono ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [PawelAdamczuk](https://github.com/PawelAdamczuk) - Paweł Adamczuk ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [plasmarocker](https://github.com/plasmarocker) - Jonathan Carter ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [hakenr](https://github.com/hakenr) - Robert Haken ![10 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-10-green) +* [timdeschryver](https://github.com/timdeschryver) - Tim Deschryver ![5 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-5-green) +* [damienbod](https://github.com/damienbod) - damienbod ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [sousadiego11](https://github.com/sousadiego11) - Diego Sousa ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [andriibratanin](https://github.com/andriibratanin) - Andrii Bratanin ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [ceddy4395](https://github.com/ceddy4395) - Cedric ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [joegoldman2](https://github.com/joegoldman2) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [ndc](https://github.com/ndc) - Endy Tjahjono ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [PawelAdamczuk](https://github.com/PawelAdamczuk) - Paweł Adamczuk ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [plasmarocker](https://github.com/plasmarocker) - Jonathan Carter ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) diff --git a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod5.md b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod5.md index 374ecd61c20e..c70294445517 100644 --- a/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod5.md +++ b/aspnetcore/whats-new/dotnet-AspNetCore.Docs-mod5.md @@ -13,57 +13,57 @@ Welcome to what's new in the ASP.NET Core docs for May 2024. This article lists ### New articles -- +* ### Updated articles -- - Add OverscanCount to ref article -- - Update cascading auth state service requirements -- - Bound field or property expression convention -- - Maximum parallel invocations per client remark -- +* - Add OverscanCount to ref article +* - Update cascading auth state service requirements +* - Bound field or property expression convention +* - Maximum parallel invocations per client remark +* - More hints on interactivity for doc components - New .NET MAUI BWA with shared UI article -- - Location override using the "Sensors" pane -- - Surface new tutorial in tutorial list -- +* - Location override using the "Sensors" pane +* - Surface new tutorial in tutorial list +* - More hints on interactivity for doc components - Static SSR pages in a globally-interactive app -- +* - Maximum parallel invocations per client remark - Inform readers on support status of stateful reconnect -- - More hints on interactivity for doc components -- - RCLs for Blazor apps that support pages+views -- +* - More hints on interactivity for doc components +* - RCLs for Blazor apps that support pages+views +* - Azure Container Apps updates - Inform readers on support status of stateful reconnect -- +* - Add OverscanCount to ref article - Add cross-link to new guidance -- - Remark on ownership of service API registration -- +* - Remark on ownership of service API registration +* - BlazorWebAppOidcBff Aspire article updates - Add product unit issue cross-link -- - Update ref source links to Blazor security API -- - Add OverscanCount to ref article -- - More hints on interactivity for doc components -- - Update "CLI" tab controls +* - Update ref source links to Blazor security API +* - Add OverscanCount to ref article +* - More hints on interactivity for doc components +* - Update "CLI" tab controls ## Data access ### Updated articles -- - Update "CLI" tab controls +* - Update "CLI" tab controls ## Fundamentals ### New articles -- +* ### Updated articles -- +* - Update install package instructions. - Bring back OpenAPI package installation instructions - Move up ## Customize OpenAPI endpoints with endpoint metadata @@ -75,42 +75,42 @@ Welcome to what's new in the ASP.NET Core docs for May 2024. This article lists - Add content on endpoint customization and Scalar docs - Post-PR review. - Add docs on Microsoft.AspNetCore.OpenApi -- - Document the Preview 4 developer exception page -- - Location override using the "Sensors" pane -- - Add publishtrimmed note -- - Update "CLI" tab controls +* - Document the Preview 4 developer exception page +* - Location override using the "Sensors" pane +* - Add publishtrimmed note +* - Update "CLI" tab controls ## gRPC ### Updated articles -- - gRPC Health Checks: Add client factory example +* - gRPC Health Checks: Add client factory example ## Hosting and deployment ### Updated articles -- - Document ShutdownDelay -- - Add doc about X-Forwarded-Prefix/X-Original-Prefix -- - Update "CLI" tab controls -- - Update building-net-docker-images.md -- - Update "CLI" tab controls +* - Document ShutdownDelay +* - Add doc about X-Forwarded-Prefix/X-Original-Prefix +* - Update "CLI" tab controls +* - Update building-net-docker-images.md +* - Update "CLI" tab controls ## Migration ### Updated articles -- - Hosted WASM to BWA migration updates +* - Hosted WASM to BWA migration updates ## Performance ### New articles -- +* ### Updated articles -- +* - Document .NET 9 new feature - HybridCache - Moniker prep for 9.0 content @@ -118,8 +118,8 @@ Welcome to what's new in the ASP.NET Core docs for May 2024. This article lists ### Updated articles -- - SignalR:H ubConnectionBuild: Update to withServerTimeout and withKeepAlive -- +* - SignalR:H ubConnectionBuild: Update to withServerTimeout and withKeepAlive +* - What's new OpenAPI - HybridCache in What's new doc @@ -127,40 +127,40 @@ Welcome to what's new in the ASP.NET Core docs for May 2024. This article lists ### Updated articles -- - Update "CLI" tab controls -- - Update "CLI" tab controls -- +* - Update "CLI" tab controls +* - Update "CLI" tab controls +* - Mon prep - content health -- - Update key-vault-configuration.md -- - DataProtection Blob warning -- - Update "CLI" tab controls -- +* - Update key-vault-configuration.md +* - DataProtection Blob warning +* - Update "CLI" tab controls +* - move up linux-dev-certs - linux-dev-certs easy -- - Implement IEmailSender to customize emails -- - Update "CLI" tab controls -- - Update "CLI" tab controls -- - Add a Prerequisites section +* - Implement IEmailSender to customize emails +* - Update "CLI" tab controls +* - Update "CLI" tab controls +* - Add a Prerequisites section ## SignalR ### Updated articles -- - SignalR:H ubConnectionBuild: Update to withServerTimeout and withKeepAlive +* - SignalR:H ubConnectionBuild: Update to withServerTimeout and withKeepAlive ## Tutorials ### Updated articles -- - Update "CLI" tab controls -- - First MVC: Clarify project location has no restriction -- - Update "CLI" tab controls -- +* - Update "CLI" tab controls +* - First MVC: Clarify project location has no restriction +* - Update "CLI" tab controls +* - Update "CLI" tab controls - Bump Swashbuckle versions - Update Swashbuckle documentation -- +* - First Web API: Linux: Add tools path - First Web API: no loc correction for New Scaffolded Item menu @@ -168,13 +168,13 @@ Welcome to what's new in the ASP.NET Core docs for May 2024. This article lists The following people contributed to the ASP.NET Core docs during this period. Thank you! Learn how to contribute by following the links under "Get involved" in the [what's new landing page](index.yml). -- [martincostello](https://github.com/martincostello) - Martin Costello ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) -- [hakenr](https://github.com/hakenr) - Robert Haken ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [joegoldman2](https://github.com/joegoldman2) - ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [kevinchalet](https://github.com/kevinchalet) - Kévin Chalet ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [azarboon](https://github.com/azarboon) - Mahdi Azarboon ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [capdiem](https://github.com/capdiem) - capdiem ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [JonathanBout](https://github.com/JonathanBout) - Jonathan Bout ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [jpbulman](https://github.com/jpbulman) - JP Bulman ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [MrXhh](https://github.com/MrXhh) - 小辉辉 ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [tuhlaajapoika](https://github.com/tuhlaajapoika) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [martincostello](https://github.com/martincostello) - Martin Costello ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) +* [hakenr](https://github.com/hakenr) - Robert Haken ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [joegoldman2](https://github.com/joegoldman2) - ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [kevinchalet](https://github.com/kevinchalet) - Kévin Chalet ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) +* [azarboon](https://github.com/azarboon) - Mahdi Azarboon ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [capdiem](https://github.com/capdiem) - capdiem ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [JonathanBout](https://github.com/JonathanBout) - Jonathan Bout ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [jpbulman](https://github.com/jpbulman) - JP Bulman ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [MrXhh](https://github.com/MrXhh) - 小辉辉 ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +* [tuhlaajapoika](https://github.com/tuhlaajapoika) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) From 99fbda684bbb1d1b14ba257810c20115429f4d14 Mon Sep 17 00:00:00 2001 From: Bowen <37032357+Owenll66@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:33:37 +1000 Subject: [PATCH 2/3] Include DateOnly and TimeOnly in supported types (#35160) --- aspnetcore/blazor/fundamentals/routing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aspnetcore/blazor/fundamentals/routing.md b/aspnetcore/blazor/fundamentals/routing.md index a11f8c2b7514..5e01ac44267f 100644 --- a/aspnetcore/blazor/fundamentals/routing.md +++ b/aspnetcore/blazor/fundamentals/routing.md @@ -1056,6 +1056,7 @@ Navigation.GetUriWithQueryParameters("{URI}", {PARAMETERS}) Supported types are identical to supported types for route constraints: * `bool` +* `DateOnly` * `DateTime` * `decimal` * `double` @@ -1064,6 +1065,7 @@ Supported types are identical to supported types for route constraints: * `int` * `long` * `string` +* `TimeOnly` Supported types include: From d5fb626b70a6616d8a8257d02291cda0f8bbc8e7 Mon Sep 17 00:00:00 2001 From: Luke Latham <1622880+guardrex@users.noreply.github.com> Date: Mon, 7 Apr 2025 11:26:35 -0400 Subject: [PATCH 3/3] Add coverage for analyzer violation BL0007 (#35161) --- aspnetcore/blazor/components/index.md | 4 +-- aspnetcore/diagnostics/bl0001.md | 2 +- aspnetcore/diagnostics/bl0002.md | 2 +- aspnetcore/diagnostics/bl0003.md | 2 +- aspnetcore/diagnostics/bl0004.md | 2 +- aspnetcore/diagnostics/bl0005.md | 2 +- aspnetcore/diagnostics/bl0006.md | 2 +- aspnetcore/diagnostics/bl0007.md | 34 +++++++++++++++++++++++++ aspnetcore/diagnostics/code-analysis.md | 1 + aspnetcore/toc.yml | 2 ++ 10 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 aspnetcore/diagnostics/bl0007.md diff --git a/aspnetcore/blazor/components/index.md b/aspnetcore/blazor/components/index.md index df61df4117fb..79319ee4c515 100644 --- a/aspnetcore/blazor/components/index.md +++ b/aspnetcore/blazor/components/index.md @@ -1071,14 +1071,14 @@ For more information, see . > [!WARNING] > Providing initial values for component parameters is supported, but don't create a component that writes to its own parameters after the component is rendered for the first time. For more information, see . -Component parameters should be declared as *auto-properties*, meaning that they shouldn't contain custom logic in their `get` or `set` accessors. For example, the following `StartData` property is an auto-property: +Component parameters should be declared as [automatically-implemented properties (*auto properties*)](/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties), meaning that they shouldn't contain custom logic in their `get` or `set` accessors. For example, the following `StartData` property is an auto property: ```csharp [Parameter] public DateTime StartData { get; set; } ``` -Don't place custom logic in the `get` or `set` accessor because component parameters are purely intended for use as a channel for a parent component to flow information to a child component. If a `set` accessor of a child component property contains logic that causes rerendering of the parent component, an infinite rendering loop results. +Don't place custom logic in the `get` or `set` accessor because component parameters are purely intended for use as a channel for a parent component to flow information to a child component. If a `set` accessor of a child component property contains logic that causes rerendering of the parent component, an infinite rendering loop results. Other side effects include unexpected extra renderings and parameter value overwrites. To transform a received parameter value: diff --git a/aspnetcore/diagnostics/bl0001.md b/aspnetcore/diagnostics/bl0001.md index 9575e1bfcb22..f9be1941fa5a 100644 --- a/aspnetcore/diagnostics/bl0001.md +++ b/aspnetcore/diagnostics/bl0001.md @@ -1,7 +1,7 @@ --- title: "BL0001: Component parameter should have public setters" description: "Learn about analysis rule BL0001: Component parameter should have public setters" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0002.md b/aspnetcore/diagnostics/bl0002.md index 031ab2853b11..86ca758dda24 100644 --- a/aspnetcore/diagnostics/bl0002.md +++ b/aspnetcore/diagnostics/bl0002.md @@ -1,7 +1,7 @@ --- title: "BL0002: Component has multiple CaptureUnmatchedValues parameters" description: "Learn about analysis rule BL0002: Component has multiple CaptureUnmatchedValues parameters" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0003.md b/aspnetcore/diagnostics/bl0003.md index 2f2019992ddc..d2f80d37ac0c 100644 --- a/aspnetcore/diagnostics/bl0003.md +++ b/aspnetcore/diagnostics/bl0003.md @@ -1,7 +1,7 @@ --- title: "BL0003: Component parameter with CaptureUnmatchedValues has the wrong type" description: "Learn about analysis rule BL0003: Component parameter with CaptureUnmatchedValues has the wrong type" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0004.md b/aspnetcore/diagnostics/bl0004.md index 6809b589133f..0796d47fd011 100644 --- a/aspnetcore/diagnostics/bl0004.md +++ b/aspnetcore/diagnostics/bl0004.md @@ -1,7 +1,7 @@ --- title: "BL0004: Component parameter should be public" description: "Learn about analysis rule BL0004: Component parameter should be public" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0005.md b/aspnetcore/diagnostics/bl0005.md index 408ca61d16c4..9d8bff7ae688 100644 --- a/aspnetcore/diagnostics/bl0005.md +++ b/aspnetcore/diagnostics/bl0005.md @@ -1,7 +1,7 @@ --- title: "BL0005: Component parameter should not be set outside of its component" description: "Learn about analysis rule BL0005: Component parameter should not be set outside of its component" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0006.md b/aspnetcore/diagnostics/bl0006.md index b7354ad31a97..c244f47237b8 100644 --- a/aspnetcore/diagnostics/bl0006.md +++ b/aspnetcore/diagnostics/bl0006.md @@ -1,7 +1,7 @@ --- title: "BL0006: Do not use RenderTree types" description: "Learn about analysis rule BL0006: Do not use RenderTree types" -author: pranavkm +author: guardrex monikerRange: '>= aspnetcore-3.1' ms.author: riande ms.date: 10/21/2021 diff --git a/aspnetcore/diagnostics/bl0007.md b/aspnetcore/diagnostics/bl0007.md new file mode 100644 index 000000000000..5d1f22f80b83 --- /dev/null +++ b/aspnetcore/diagnostics/bl0007.md @@ -0,0 +1,34 @@ +--- +title: "BL0007: Component parameter '{0}' should be auto property" +description: "Learn about analysis rule BL0007: Component parameter '{0}' should be auto property" +author: guardrex +monikerRange: '>= aspnetcore-3.1' +ms.author: riande +ms.date: 04/07/2025 +uid: diagnostics/bl0007 +--- +# BL0007: Component parameter '{0}' should be auto property + +| | Value | +| - | - | +| **Rule ID** | BL0007 | +| **Category** | Usage | +| **Fix is breaking or non-breaking** | Non-breaking | + +## Cause + +A [component parameter](xref:blazor/components/index#component-parameters), which is a public [C# property](/dotnet/csharp/programming-guide/classes-and-structs/properties) of a component class with the [`[Parameter]` attribute](xref:Microsoft.AspNetCore.Components.ParameterAttribute), isn't an [automatically-implemented property (*auto property*)](/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties). + +## Rule description + +A component parameter is a framework-managed communication channel between a parent and a child component. Developers shouldn't read or write to the parameter in a [`get` (getter) or `set` (setter) accessor](/dotnet/csharp/programming-guide/classes-and-structs/using-properties), either from inside or outside the component. + +Possible side effects of interacting directly with a component parameter include infinite rendering loops, unexpected extra renderings, and parameter value overwrites. + +## How to fix violations + +Implement the component parameter as an auto property and override or in the component class to read or transform the parameter's value. For more information, see the [`OnParametersSet{Async}` lifecycle method](xref:blazor/components/lifecycle#after-parameters-are-set-onparameterssetasync). + +## When to suppress warnings + +Do not suppress a warning from this rule. diff --git a/aspnetcore/diagnostics/code-analysis.md b/aspnetcore/diagnostics/code-analysis.md index 47389fb8df76..5e71a9e7dfea 100644 --- a/aspnetcore/diagnostics/code-analysis.md +++ b/aspnetcore/diagnostics/code-analysis.md @@ -49,6 +49,7 @@ Diagnostic ID: * [BL0004](xref:diagnostics/bl0004) * [BL0005](xref:diagnostics/bl0005) * [BL0006](xref:diagnostics/bl0006) +* [BL0007](xref:diagnostics/bl0007) * [MVC1000](xref:diagnostics/mvc1000) * [MVC1001](xref:diagnostics/mvc1001) * [MVC1002](xref:diagnostics/mvc1002) diff --git a/aspnetcore/toc.yml b/aspnetcore/toc.yml index df7e26b07dd9..043eb2aee566 100644 --- a/aspnetcore/toc.yml +++ b/aspnetcore/toc.yml @@ -1461,6 +1461,8 @@ items: uid: diagnostics/bl0005 - name: BL0006 uid: diagnostics/bl0006 + - name: BL0007 + uid: diagnostics/bl0007 - name: MVC1000 uid: diagnostics/mvc1000 - name: MVC1001