Skip to content

Commit f0b41c2

Browse files
Merge pull request #34900 from dotnet/main
Merge to Live
2 parents 60bd38b + e4c02ea commit f0b41c2

File tree

13 files changed

+67
-20
lines changed

13 files changed

+67
-20
lines changed

.github/workflows/quest-bulk.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name: "bulk quest import"
22
on:
33
schedule:
44
- cron: '0 10 * * *' # UTC time, that's 5:00 am EST, 2:00 am PST.
5+
- cron: '0 9 6 * *' # This is the morning of the 6th.
56
workflow_dispatch:
67
inputs:
78
reason:
@@ -49,5 +50,5 @@ jobs:
4950
org: ${{ github.repository_owner }}
5051
repo: ${{ github.repository }}
5152
issue: '-1'
52-
duration: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.duration || 5 }}
53+
duration: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.duration || github.event.schedule == '0 9 6 * *' && -1 || 5 }}
5354

aspnetcore/blazor/call-web-api.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,24 @@ await Http.PatchAsJsonAsync(
505505
"[{\"operationType\":2,\"path\":\"/IsComplete\",\"op\":\"replace\",\"value\":true}]");
506506
```
507507

508+
As of C# 11 (.NET 7), you can compose a JSON string as a [raw string literal](/dotnet/csharp/language-reference/tokens/raw-string). Specify JSON syntax with the <xref:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.Json%2A?displayProperty=nameWithType> field to the [`[StringSyntax]` attribute](xref:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute) for code analysis tooling:
509+
510+
```razor
511+
@using System.Diagnostics.CodeAnalysis
512+
513+
...
514+
515+
@code {
516+
[StringSyntax(StringSyntaxAttribute.Json)]
517+
private const string patchOperation =
518+
"""[{"operationType":2,"path":"/IsComplete","op":"replace","value":true}]""";
519+
520+
...
521+
522+
await Http.PatchAsJsonAsync($"todoitems/{id}", patchOperation);
523+
}
524+
```
525+
508526
<xref:System.Net.Http.Json.HttpClientJsonExtensions.PatchAsJsonAsync%2A> returns an <xref:System.Net.Http.HttpResponseMessage>. To deserialize the JSON content from the response message, use the <xref:System.Net.Http.Json.HttpContentJsonExtensions.ReadFromJsonAsync%2A> extension method. The following example reads JSON todo item data as an array. An empty array is created if no item data is returned by the method, so `content` isn't null after the statement executes:
509527

510528
```csharp

aspnetcore/blazor/components/index.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Although "Razor components" shares some naming with other ASP.NET Core content-r
2828
:::moniker range=">= aspnetcore-8.0"
2929

3030
> [!IMPORTANT]
31-
> When using a Blazor Web App, most of the Blazor documentation example components ***require*** interactivity to function and demonstrate the concepts covered by the articles. When you test an example component provided by an article, make sure that either the app adopts global interactivity or the component adopts an interactive render mode. More information on this subject is provided by <xref:blazor/components/render-modes>, which is the next article in the table of contents after this article.
31+
> When using a Blazor Web App, most of the Blazor documentation example components ***require*** interactivity to function and demonstrate the concepts covered by the articles. *Interactivity* makes it possible for users to interact with rendered components. This includes app responses to [Document Object Model (DOM)](https://developer.mozilla.org/docs/Web/API/Document_Object_Model/Introduction) events and state changes tied to C# members via Blazor's event handlers and binding. When you test an example component provided by an article in a Blazor Web App, make sure that either the app adopts global interactivity or the component adopts an interactive render mode. More information on this subject is provided by <xref:blazor/components/render-modes>, which is the next article in the table of contents after this article.
3232
3333
:::moniker-end
3434

@@ -67,6 +67,9 @@ Components use [Razor syntax](xref:mvc/views/razor). Two Razor features are exte
6767
* App namespaces (alphabetical order)
6868
* Other directives (alphabetical order)
6969

70+
> [!NOTE]
71+
> A *render mode* is only applied in Blazor Web Apps and includes modes that establish user interactivity with the rendered component. For more information, see <xref:blazor/components/render-modes>.
72+
7073
No blank lines appear among the directives. One blank line appears between the directives and the first line of Razor markup.
7174

7275
Example:

aspnetcore/blazor/components/render-modes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ This guidance doesn't apply to standalone Blazor WebAssembly apps. Blazor WebAss
1818

1919
## Render modes
2020

21-
Every component in a Blazor Web App adopts a *render mode* to determine the hosting model that it uses, where it's rendered, and whether or not it's interactive.
21+
Every component in a Blazor Web App adopts a *render mode* to determine the hosting model that it uses, where it's rendered, and whether or not it's interactive. *Interactivity* makes it possible for users to interact with rendered components. This includes app responses to [Document Object Model (DOM)](https://developer.mozilla.org/docs/Web/API/Document_Object_Model/Introduction) events and state changes tied to C# members via Blazor's event handlers and binding.
2222

2323
The following table shows the available render modes for rendering Razor components in a Blazor Web App. To apply a render mode to a component use the `@rendermode` directive on the component instance or on the component definition. Later in this article, examples are shown for each render mode scenario.
2424

aspnetcore/blazor/fundamentals/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ Razor components are either *statically* rendered or *interactively* rendered.
2222

2323
*Static* or *static rendering* is a server-side scenario that means the component is rendered without the capacity for interplay between the user and .NET/C# code. JavaScript and HTML DOM events remain unaffected, but no user events on the client can be processed with .NET running on the server.
2424

25-
*Interactive* or *interactive rendering* means that the component has the capacity to process .NET events via C# code. The .NET events are either processed on the server by the ASP.NET Core runtime or in the browser on the client by the WebAssembly-based Blazor runtime.
25+
*Interactive*/*interactivity* or *interactive rendering* means that the component has the capacity to process .NET events and binding via C# code. The .NET events and binding are either processed on the server by the ASP.NET Core runtime or in the browser on the client by the WebAssembly-based Blazor runtime.
2626

2727
> [!IMPORTANT]
28-
> When using a Blazor Web App, most of the Blazor documentation example components ***require*** interactivity to function and demonstrate the concepts covered by the articles. When you test an example component provided by an article, make sure that either the app adopts global interactivity or the component adopts an interactive render mode.
28+
> When using a Blazor Web App, most of the Blazor documentation example components ***require*** interactivity to function and demonstrate the concepts covered by the articles. When you test an example component provided by an article in a Blazor Web App, make sure that either the app adopts global interactivity or the component adopts an interactive render mode. More information on this subject is provided by <xref:blazor/components/render-modes> in the *Components* section, which appears later in the Blazor documentation set.
2929
3030
More information on these concepts and how to control static and interactive rendering is found in the <xref:blazor/components/render-modes> article later in the Blazor documentation.
3131

aspnetcore/blazor/host-and-deploy/webassembly.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ A standalone Blazor WebAssembly app is published as a set of static files for ho
734734

735735
To host the app in Docker:
736736

737-
* Choose a Docker container with web server support, such as Ngnix or Apache.
737+
* Choose a Docker container with web server support, such as Nginx or Apache.
738738
* Copy the `publish` folder assets to a location folder defined in the web server for serving static files.
739739
* Apply additional configuration as needed to serve the Blazor WebAssembly app.
740740

aspnetcore/blazor/test.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,4 @@ The following actions take place at each step of the test:
164164
## Additional resources
165165

166166
* [Getting Started with bUnit](https://bunit.dev/docs/getting-started/): bUnit instructions include guidance on creating a test project, referencing testing framework packages, and building and running tests.
167-
* [Blazor Testing from A to Z - Egil Hansen - Swetugg Stockholm 2024](https://youtu.be/GU_XbWjrP_g?si=1SrjeaP1T9LdFegN) ([Swetugg](https://www.swetugg.se/sthlm-2025))
167+
* [Blazor Testing from A to Z - Egil Hansen - NDC London 2025](https://www.youtube.com/watch?v=p-H5fEMCB8s) ([NDC London](https://ndclondon.com/))

aspnetcore/fundamentals/minimal-apis/resultsStream/7.0-samples/ResultsStreamSample/ResultsStreamSample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.1.0" />
1717
<PackageReference Include="Azure.Storage.Queues" Version="12.11.0" />
1818
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.0.0" />
19-
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.5" />
19+
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.7" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

aspnetcore/fundamentals/servers/yarp/yarp-overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ A reverse proxy is a server that sits between client devices and backend servers
2424
- Load Balancing: Distributes incoming traffic across multiple backend servers to prevent overloading a specific server. Distribution increases performance and reliability.
2525
- Scalability: By distributing traffic across multiple servers, a reverse proxy helps scale apps to handle more users and higher loads. Backend servers scaled (added or removed) without impacting the client.
2626

27-
- [SSL/TSL Termination](/azure/application-gateway/ssl-overview): Offloads the TSL encryption and decryption processes from backend servers, reducing their workload.
27+
- [SSL/TLS Termination](/azure/application-gateway/ssl-overview): Offloads the TLS encryption and decryption processes from backend servers, reducing their workload.
2828
- Connection abstraction, decoupling and control over URL-space: Inbound requests from external clients and outbound responses from the backend are independent. This independence allows for differnt:
2929
- Versions of HTTP, ie, HTTP/1.1, HTTP/2, HTTP/3. The proxy can upgrade or downgrade HTTP versions.
3030
- Connection lifetimes, which enables having long-lived connections on the backend while maintaining short client connections.
3131
- Control Over URL-Space: Incoming URLs can be transformed before forwarding to the backend. This abstracts the external URLs from how they are mapped to internal services. Internal service endpoints can change without affecting external URLs.
3232
- Security: Internal service endpoints can be hidden from external exposure, protecting against some types of cyber attacks such as [DDoS attacks](https://www.microsoft.com/security/business/security-101/what-is-a-ddos-attack?msockid=3e35ed3aa4666d8003aaf830a5006c74).
3333
- Caching: Frequently requested resources can be cached to reduce the load on backend servers and improve response times.
3434
- Versioning: Different versions of an API can be supported using different URL mappings.
35-
- Simplified maintenance: Reverse proxies can handle [SSL/TSL Termination](/azure/application-gateway/ssl-overview) and other tasks, simplifying the configuration and maintenance of backend servers. For example, SSL certificates and security policies can be managed at the reverse proxy level instead of on each individual server.
35+
- Simplified maintenance: Reverse proxies can handle [SSL/TLS Termination](/azure/application-gateway/ssl-overview) and other tasks, simplifying the configuration and maintenance of backend servers. For example, SSL certificates and security policies can be managed at the reverse proxy level instead of on each individual server.
3636

3737
## How a reverse proxy handles HTTP
3838

aspnetcore/grpc/client.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: jamesnk
44
description: Learn how to call gRPC services with the .NET gRPC client.
55
monikerRange: '>= aspnetcore-3.0'
66
ms.author: wpickett
7-
ms.date: 01/08/2025
7+
ms.date: 03/06/2025
88
uid: grpc/client
99
---
1010
# Call gRPC services with the .NET client
@@ -62,6 +62,8 @@ Channel and client performance and usage:
6262

6363
`GrpcChannel.ForAddress` isn't the only option for creating a gRPC client. If calling gRPC services from an ASP.NET Core app, consider [gRPC client factory integration](xref:grpc/clientfactory). gRPC integration with `HttpClientFactory` offers a centralized alternative to creating gRPC clients.
6464

65+
When calling gRPC methods, prefer using [asynchronous programming with async and await](/dotnet/csharp/asynchronous-programming/). Making gRPC calls with blocking, such as using `Task.Result` or `Task.Wait()`, prevents other tasks from using a thread. This can lead to thread pool starvation and poor performance. It could cause the app to hang with a deadlock. For more information, see [Asynchronous calls in client apps](xref:grpc/performance#asynchronous-calls-in-client-apps).
66+
6567
## Make gRPC calls
6668

6769
A gRPC call is initiated by calling a method on the client. The gRPC client will handle message serialization and addressing the gRPC call to the correct service.
@@ -87,8 +89,10 @@ Console.WriteLine("Greeting: " + response.Message);
8789

8890
Each unary service method in the `.proto` file will result in two .NET methods on the concrete gRPC client type for calling the method: an asynchronous method and a blocking method. For example, on `GreeterClient` there are two ways of calling `SayHello`:
8991

90-
* `GreeterClient.SayHelloAsync` - calls `Greeter.SayHello` service asynchronously. Can be awaited.
91-
* `GreeterClient.SayHello` - calls `Greeter.SayHello` service and blocks until complete. Don't use in asynchronous code.
92+
* `GreeterClient.SayHelloAsync` - calls the `Greeter.SayHello` service asynchronously. Can be awaited.
93+
* `GreeterClient.SayHello` - calls the `Greeter.SayHello` service and blocks until complete. Don't use in asynchronous code. Can cause performance and reliability issues.
94+
95+
For more information, see [Asynchronous calls in client apps](xref:grpc/performance#asynchronous-calls-in-client-apps).
9296

9397
### Server streaming call
9498

0 commit comments

Comments
 (0)