From 43c78e72097a98acf8973d0e433cc16ee2e9d47b Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:17:51 -0700 Subject: [PATCH 1/2] fix broken links --- docfx.json | 3 +- ...munication-in-microservice-architecture.md | 2 +- .../durable-duplex-correlation.md | 2 +- ...wcf-web-http-programming-model-overview.md | 262 +++++++++--------- .../interpolated-strings.md | 2 +- docs/fsharp/language-reference/results.md | 4 +- docs/whats-new/dotnet-docs-mod1.md | 2 +- 7 files changed, 139 insertions(+), 138 deletions(-) diff --git a/docfx.json b/docfx.json index 42858ef8c38e6..7619fc12437e3 100644 --- a/docfx.json +++ b/docfx.json @@ -77,7 +77,8 @@ }, { "files": [ - "Compiler Breaking Changes - DotNet 7.md" + "Compiler Breaking Changes - DotNet 7.md", + "Compiler Breaking Changes - DotNet 8.md" ], "src": "_roslyn/docs/compilers/CSharp", "dest": "csharp/whats-new/breaking-changes", diff --git a/docs/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture.md b/docs/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture.md index b36b32fa93a07..78ac23de2f629 100644 --- a/docs/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture.md +++ b/docs/architecture/microservices/architect-microservice-container-applications/communication-in-microservice-architecture.md @@ -13,7 +13,7 @@ There isn't one solution, but several. One solution involves isolating the busin A microservices-based application is a distributed system running on multiple processes or services, usually even across multiple servers or hosts. Each service instance is typically a process. Therefore, services must interact using an inter-process communication protocol such as HTTP, AMQP, or a binary protocol like TCP, depending on the nature of each service. -The microservice community promotes the philosophy of "[smart endpoints and dumb pipes](https://simplicable.com/new/smart-endpoints-and-dumb-pipes)" This slogan encourages a design that's as decoupled as possible between microservices, and as cohesive as possible within a single microservice. As explained earlier, each microservice owns its own data and its own domain logic. But the microservices composing an end-to-end application are usually simply choreographed by using REST communications rather than complex protocols such as WS-\* and flexible event-driven communications instead of centralized business-process-orchestrators. +The microservice community promotes the philosophy of "[smart endpoints and dumb pipes](https://simplicable.com/new/smart-endpoints-and-dumb-pipes)". This slogan encourages a design that's as decoupled as possible between microservices, and as cohesive as possible within a single microservice. As explained earlier, each microservice owns its own data and its own domain logic. But the microservices composing an end-to-end application are usually simply choreographed by using REST communications rather than complex protocols such as WS-\* and flexible event-driven communications instead of centralized business-process-orchestrators. The two commonly used protocols are HTTP request/response with resource APIs (when querying most of all), and lightweight asynchronous messaging when communicating updates across multiple microservices. These are explained in more detail in the following sections. diff --git a/docs/framework/wcf/feature-details/durable-duplex-correlation.md b/docs/framework/wcf/feature-details/durable-duplex-correlation.md index 65fa4521fce66..c8812de64651f 100644 --- a/docs/framework/wcf/feature-details/durable-duplex-correlation.md +++ b/docs/framework/wcf/feature-details/durable-duplex-correlation.md @@ -13,7 +13,7 @@ Durable duplex correlation, also known as callback correlation, is useful when a To use durable duplex correlation, the two services must use a context-enabled binding that supports two-way operations, such as or . The calling service registers a with the desired binding on their client . The receiving service receives this data in the initial call and then uses it on its own in the activity that makes the call back to the calling service. In this example, two services communicate with each other. The first service invokes a method on the second service and then waits for a reply. The second service knows the name of the callback method, but the endpoint of the service that implements this method isn't known at design time. > [!NOTE] -> Durable duplex can only be used when the of the endpoint is configured with . If it is not, then an exception is thrown with the following message: "The message contains a callback context header with an endpoint reference for [AddressingVersion](https://schemas.xmlsoap.org/ws/2004/08/addressing). Callback context can only be transmitted when the AddressingVersion is configured with 'WSAddressing10'. +> Durable duplex can only be used when the of the endpoint is configured with . If it's not, then an exception is thrown with the following message: "The message contains a callback context header with an endpoint reference for AddressingVersion. Callback context can only be transmitted when the AddressingVersion is configured with 'WSAddressing10'." In the following example, a workflow service is hosted that creates a callback using . diff --git a/docs/framework/wcf/feature-details/wcf-web-http-programming-model-overview.md b/docs/framework/wcf/feature-details/wcf-web-http-programming-model-overview.md index 50d5627db28f3..596f47d64dbfa 100644 --- a/docs/framework/wcf/feature-details/wcf-web-http-programming-model-overview.md +++ b/docs/framework/wcf/feature-details/wcf-web-http-programming-model-overview.md @@ -6,145 +6,145 @@ ms.assetid: 381fdc3a-6e6c-4890-87fe-91cca6f4b476 --- # WCF Web HTTP Programming Model Overview -The Windows Communication Foundation (WCF) WEB HTTP programming model provides the basic elements required to build WEB HTTP services with WCF. WCF WEB HTTP services are designed to be accessed by the widest range of possible clients, including Web browsers and have the following unique requirements: - -- **URIs and URI Processing** URIs play a central role in the design of WEB HTTP services. The WCF WEB HTTP programming model uses the and classes to provide URI processing capabilities. - -- **Support for GET and POST operations** WEB HTTP services make use of the GET verb for data retrieval, in addition to various invoke verbs for data modification and remote invocation. The WCF WEB HTTP programming model uses the and to associate service operations with both GET and other HTTP verbs like PUT, POST, and DELETE. - -- **Multiple data formats** Web-style services process many kinds of data in addition to SOAP messages. The WCF WEB HTTP programming model uses the and to support many different data formats including XML documents, JSON data object, and streams of binary content such as images, video files, or plain text. - - The WCF WEB HTTP programming model extends the reach of WCF to cover Web-style scenarios that include WEB HTTP services, AJAX and JSON services, and Syndication (ATOM/RSS) feeds. For more information about AJAX and JSON services, see [AJAX Integration and JSON Support](ajax-integration-and-json-support.md). For more information about Syndication, see [WCF Syndication Overview](wcf-syndication-overview.md). - - There are no extra restrictions on the types of data that can be returned from a WEB HTTP service. Any serializable type can be returned from an WEB HTTP service operation. Because WEB HTTP service operations can be invoke by a web browser there is a limitation on what data types can be specified in a URL. For more information on what types are supported by default see the **UriTemplate Query String Parameters and URLs** section below. The default behavior can be changed by providing your own T:System.ServiceModel.Dispatcher.QueryStringConverter implementation which specifies how to convert the parameters specified in a URL to the actual parameter type. For more information, see - +The Windows Communication Foundation (WCF) WEB HTTP programming model provides the basic elements required to build WEB HTTP services with WCF. WCF WEB HTTP services are designed to be accessed by the widest range of possible clients, including Web browsers and have the following unique requirements: + +- **URIs and URI Processing** URIs play a central role in the design of WEB HTTP services. The WCF WEB HTTP programming model uses the and classes to provide URI processing capabilities. + +- **Support for GET and POST operations** WEB HTTP services make use of the GET verb for data retrieval, in addition to various invoke verbs for data modification and remote invocation. The WCF WEB HTTP programming model uses the and to associate service operations with both GET and other HTTP verbs like PUT, POST, and DELETE. + +- **Multiple data formats** Web-style services process many kinds of data in addition to SOAP messages. The WCF WEB HTTP programming model uses the and to support many different data formats including XML documents, JSON data object, and streams of binary content such as images, video files, or plain text. + + The WCF WEB HTTP programming model extends the reach of WCF to cover Web-style scenarios that include WEB HTTP services, AJAX and JSON services, and Syndication (ATOM/RSS) feeds. For more information about AJAX and JSON services, see [AJAX Integration and JSON Support](ajax-integration-and-json-support.md). For more information about Syndication, see [WCF Syndication Overview](wcf-syndication-overview.md). + + There are no extra restrictions on the types of data that can be returned from a WEB HTTP service. Any serializable type can be returned from an WEB HTTP service operation. Because WEB HTTP service operations can be invoke by a web browser there is a limitation on what data types can be specified in a URL. For more information on what types are supported by default see the **UriTemplate Query String Parameters and URLs** section below. The default behavior can be changed by providing your own T:System.ServiceModel.Dispatcher.QueryStringConverter implementation which specifies how to convert the parameters specified in a URL to the actual parameter type. For more information, see + > [!CAUTION] -> Services written with the WCF WEB HTTP programming model do not use SOAP messages. Because SOAP is not used, the security features provided by WCF cannot be used. You can, however use transport-based security by hosting your service with HTTPS. For more information about WCF security, see [Security Overview](security-overview.md) - +> Services written with the WCF WEB HTTP programming model do not use SOAP messages. Because SOAP is not used, the security features provided by WCF cannot be used. You can, however use transport-based security by hosting your service with HTTPS. For more information about WCF security, see [Security Overview](security-overview.md) + > [!WARNING] -> Installing the WebDAV extension for IIS can cause Web HTTP services to return an HTTP 405 error as the WebDAV extension attempts to handle all PUT requests. To work around this issue you can uninstall the WebDAV extension or disable the WebDAV extension for your web site. For more information, see [IIS and WebDav](https://learn.iis.net/page.aspx/357/webdav-for-iis-70/) - -## URI Processing with UriTemplate and UriTemplateTable - - URI templates provide an efficient syntax for expressing large sets of structurally similar URIs. For example, the following template expresses the set of all three-segment URIs that begin with "a" and end with "c" without regard to the value of the intermediate segment: a/{segment}/c - - This template describes URIs like the following: - -- a/x/c - -- a/y/c - -- a/z/c - -- and so on. - - In this template, the curly brace notation ("{segment}") indicates a variable segment instead of a literal value. - - .NET Framework provides an API for working with URI templates called . `UriTemplates` allow you to do the following: - -- You can call one of the `Bind` methods with a set of parameters to produce a *fully-closed URI* that matches the template. This means all variables within the URI template are replaced with actual values. - -- You can call `Match`() with a candidate URI, which uses a template to break up a candidate URI into its constituent parts and returns a dictionary that contains the different parts of the URI labeled according to the variables in the template. - -- `Bind`() and `Match`() are inverses so that you can call `Match`( `Bind`( x ) ) and come back with the same environment you started with. - - There are many times (especially on the server, where dispatching a request to a service operation based on the URI is necessary) that you want to keep track of a set of objects in a data structure that can independently address each of the contained templates. represents a set of URI templates and selects the best match given a set of templates and a candidate URI. This is not affiliated with any particular networking stack (WCF included) so you can use it wherever necessary. - - The WCF Service Model makes use of and to associate service operations with a set of URIs described by a . A service operation is associated with a , using either the or the . For more information about and , see [UriTemplate and UriTemplateTable](uritemplate-and-uritemplatetable.md) - -## WebGet and WebInvoke Attributes - - WCF WEB HTTP services make use of retrieval verbs (for example HTTP GET) in addition to various invoke verbs (for example HTTP POST, PUT, and DELETE). The WCF WEB HTTP programming model allows service developers to control the both the URI template and verb associated with their service operations with the and . The and the allow you to control how individual operations get bound to URIs and the HTTP methods associated with those URIs. For example, adding and in the following code. - +> Installing the WebDAV extension for IIS can cause Web HTTP services to return an HTTP 405 error as the WebDAV extension attempts to handle all PUT requests. To work around this issue you can uninstall the WebDAV extension or disable the WebDAV extension for your web site. For more information, see [IIS and WebDav](/iis/publish/using-webdav/webdav-extension-video-walkthrough) + +## URI Processing with UriTemplate and UriTemplateTable + + URI templates provide an efficient syntax for expressing large sets of structurally similar URIs. For example, the following template expresses the set of all three-segment URIs that begin with "a" and end with "c" without regard to the value of the intermediate segment: a/{segment}/c + + This template describes URIs like the following: + +- a/x/c + +- a/y/c + +- a/z/c + +- and so on. + + In this template, the curly brace notation ("{segment}") indicates a variable segment instead of a literal value. + + .NET Framework provides an API for working with URI templates called . `UriTemplates` allow you to do the following: + +- You can call one of the `Bind` methods with a set of parameters to produce a *fully-closed URI* that matches the template. This means all variables within the URI template are replaced with actual values. + +- You can call `Match`() with a candidate URI, which uses a template to break up a candidate URI into its constituent parts and returns a dictionary that contains the different parts of the URI labeled according to the variables in the template. + +- `Bind`() and `Match`() are inverses so that you can call `Match`( `Bind`( x ) ) and come back with the same environment you started with. + + There are many times (especially on the server, where dispatching a request to a service operation based on the URI is necessary) that you want to keep track of a set of objects in a data structure that can independently address each of the contained templates. represents a set of URI templates and selects the best match given a set of templates and a candidate URI. This is not affiliated with any particular networking stack (WCF included) so you can use it wherever necessary. + + The WCF Service Model makes use of and to associate service operations with a set of URIs described by a . A service operation is associated with a , using either the or the . For more information about and , see [UriTemplate and UriTemplateTable](uritemplate-and-uritemplatetable.md) + +## WebGet and WebInvoke Attributes + + WCF WEB HTTP services make use of retrieval verbs (for example HTTP GET) in addition to various invoke verbs (for example HTTP POST, PUT, and DELETE). The WCF WEB HTTP programming model allows service developers to control the both the URI template and verb associated with their service operations with the and . The and the allow you to control how individual operations get bound to URIs and the HTTP methods associated with those URIs. For example, adding and in the following code. + ```csharp -[ServiceContract] -interface ICustomer -{ - //"View It" - - [WebGet] - Customer GetCustomer(): - - //"Do It" - [WebInvoke] +[ServiceContract] +interface ICustomer +{ + //"View It" + + [WebGet] + Customer GetCustomer(): + + //"Do It" + [WebInvoke] Customer UpdateCustomerName( string id, - string newName ); -} -``` - - The preceding code allows you to make the following HTTP requests. - - `GET /GetCustomer` - - `POST /UpdateCustomerName` - - defaults to POST but you can use it for other verbs too. - + string newName ); +} +``` + + The preceding code allows you to make the following HTTP requests. + + `GET /GetCustomer` + + `POST /UpdateCustomerName` + + defaults to POST but you can use it for other verbs too. + ```csharp -[ServiceContract] -interface ICustomer -{ - //"View It" -> HTTP GET - [WebGet( UriTemplate="customers/{id}" )] - Customer GetCustomer( string id ): - - //"Do It" -> HTTP PUT - [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )] - Customer UpdateCustomer( string id, Customer newCustomer ); -} -``` - - To see a complete sample of a WCF service that uses the WCF WEB HTTP programming model, see [How to: Create a Basic WCF Web HTTP Service](how-to-create-a-basic-wcf-web-http-service.md) - -## UriTemplate Query String Parameters and URLs - - Web-style services can be called from a Web browser by typing a URL that is associated with a service operation. These service operations may take query string parameters that must be specified in a string form within the URL. The following table shows the types that can be passed within a URL and the format used. - -|Type|Format| -|----------|------------| -||0 - 255| -||-128 - 127| -||-32768 - 32767| -||-2,147,483,648 - 2,147,483,647| -||-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807| -||0 - 65535| -||0 - 4,294,967,295| -||0 - 18,446,744,073,709,551,615| -||-3.402823e38 - 3.402823e38 (exponent notation is not required)| -||-1.79769313486232e308 - 1.79769313486232e308 (exponent notation is not required)| -||Any single character| -||Any decimal in standard notation (no exponent)| -||True or False (case insensitive)| -||Any string (null string is not supported and no escaping is done)| -||MM/DD/YYYY

MM/DD/YYYY HH:MM:SS [AM|PM]

Month Day Year

Month Day Year HH:MM:SS [AM|PM]| -||DD.HH:MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds| -||A GUID, for example:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8| -||MM/DD/YYYY HH:MM:SS MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds| -|Enumerations|The enumeration value for example, which defines the enumeration as shown in the following code.

`public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };`

Any of the individual enumeration values (or their corresponding integer values) may be specified in the query string.| -|Types that have a `TypeConverterAttribute` that can convert the type to and from a string representation.|Depends on the Type Converter.| - -## Formats and the WCF WEB HTTP Programming Model - - The WCF WEB HTTP programming model has new features to work with many different data formats. At the binding layer, the can read and write the following different kinds of data: - -- XML - -- JSON - -- Opaque binary streams - - This means the WCF WEB HTTP programming model can handle any type of data but, you may be programming against . - - .NET Framework 3.5 provides support for JSON data (AJAX) as well as Syndication feeds (including ATOM and RSS). For more information about these features, see [WCF Web HTTP Formatting](wcf-web-http-formatting.md), [WCF Syndication Overview](wcf-syndication-overview.md), and [AJAX Integration and JSON Support](ajax-integration-and-json-support.md). - -## WCF WEB HTTP Programming Model and Security +[ServiceContract] +interface ICustomer +{ + //"View It" -> HTTP GET + [WebGet( UriTemplate="customers/{id}" )] + Customer GetCustomer( string id ): + + //"Do It" -> HTTP PUT + [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )] + Customer UpdateCustomer( string id, Customer newCustomer ); +} +``` + + To see a complete sample of a WCF service that uses the WCF WEB HTTP programming model, see [How to: Create a Basic WCF Web HTTP Service](how-to-create-a-basic-wcf-web-http-service.md) + +## UriTemplate Query String Parameters and URLs + + Web-style services can be called from a Web browser by typing a URL that is associated with a service operation. These service operations may take query string parameters that must be specified in a string form within the URL. The following table shows the types that can be passed within a URL and the format used. + +|Type|Format| +|----------|------------| +||0 - 255| +||-128 - 127| +||-32768 - 32767| +||-2,147,483,648 - 2,147,483,647| +||-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807| +||0 - 65535| +||0 - 4,294,967,295| +||0 - 18,446,744,073,709,551,615| +||-3.402823e38 - 3.402823e38 (exponent notation is not required)| +||-1.79769313486232e308 - 1.79769313486232e308 (exponent notation is not required)| +||Any single character| +||Any decimal in standard notation (no exponent)| +||True or False (case insensitive)| +||Any string (null string is not supported and no escaping is done)| +||MM/DD/YYYY

MM/DD/YYYY HH:MM:SS [AM|PM]

Month Day Year

Month Day Year HH:MM:SS [AM|PM]| +||DD.HH:MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds| +||A GUID, for example:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8| +||MM/DD/YYYY HH:MM:SS MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Seconds| +|Enumerations|The enumeration value for example, which defines the enumeration as shown in the following code.

`public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };`

Any of the individual enumeration values (or their corresponding integer values) may be specified in the query string.| +|Types that have a `TypeConverterAttribute` that can convert the type to and from a string representation.|Depends on the Type Converter.| + +## Formats and the WCF WEB HTTP Programming Model + + The WCF WEB HTTP programming model has new features to work with many different data formats. At the binding layer, the can read and write the following different kinds of data: + +- XML + +- JSON + +- Opaque binary streams + + This means the WCF WEB HTTP programming model can handle any type of data but, you may be programming against . + + .NET Framework 3.5 provides support for JSON data (AJAX) as well as Syndication feeds (including ATOM and RSS). For more information about these features, see [WCF Web HTTP Formatting](wcf-web-http-formatting.md), [WCF Syndication Overview](wcf-syndication-overview.md), and [AJAX Integration and JSON Support](ajax-integration-and-json-support.md). + +## WCF WEB HTTP Programming Model and Security Because the WCF WEB HTTP programming model does not support the WS-* protocols, the only way to secure a WCF WEB HTTP service is to expose the service over HTTPS using SSL. For more information about setting up SSL with IIS 7.0, see [How to implement SSL in IIS](https://support.microsoft.com/help/299875/how-to-implement-ssl-in-iis). - -## Troubleshooting the WCF WEB HTTP Programming Model - When calling WCF WEB HTTP services using a to create a channel, the uses the set in the configuration file even if a different is passed to the . - +## Troubleshooting the WCF WEB HTTP Programming Model + + When calling WCF WEB HTTP services using a to create a channel, the uses the set in the configuration file even if a different is passed to the . + ## See also - [WCF Syndication](wcf-syndication.md) diff --git a/docs/fsharp/language-reference/interpolated-strings.md b/docs/fsharp/language-reference/interpolated-strings.md index a77f2a47b2e66..cf4807c218b7b 100644 --- a/docs/fsharp/language-reference/interpolated-strings.md +++ b/docs/fsharp/language-reference/interpolated-strings.md @@ -147,4 +147,4 @@ let percent = $$"""50% of 20 is %%.1f{{20m * 0.5m}}""" * [Strings](strings.md) * [F# RFC FS-1001 - Interpolated strings](https://github.com/fsharp/fslang-design/blob/main/FSharp-5.0/FS-1001-StringInterpolation.md) -* [F# RFC FS-1132 - Extended syntax for interpolated strings](https://github.com/fsharp/fslang-design/blob/main/RFCs/FS-1132-better-interpolated-triple-quoted-strings.md) +* [F# RFC FS-1132 - Extended syntax for interpolated strings](https://github.com/fsharp/fslang-design/blob/main/FSharp-8.0/FS-1132-better-interpolated-triple-quoted-strings.md) diff --git a/docs/fsharp/language-reference/results.md b/docs/fsharp/language-reference/results.md index a87611ee56650..aeedac42db60d 100644 --- a/docs/fsharp/language-reference/results.md +++ b/docs/fsharp/language-reference/results.md @@ -62,14 +62,14 @@ let test() = let req1 = { Name = "Phillip"; Email = "phillip@contoso.biz" } let res1 = validateRequest (Ok req1) match res1 with - | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" + | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" | Error e -> printfn $"Error: {e}" // Prints: "My request was valid! Name: Phillip Email: phillip@consoto.biz" let req2 = { Name = "Phillip"; Email = "phillip@bananas.com" } let res2 = validateRequest (Ok req2) match res2 with - | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" + | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" | Error e -> printfn $"Error: {e}" // Prints: "Error: No email from bananas.com is allowed." diff --git a/docs/whats-new/dotnet-docs-mod1.md b/docs/whats-new/dotnet-docs-mod1.md index a064f79bb299f..584decb25625b 100644 --- a/docs/whats-new/dotnet-docs-mod1.md +++ b/docs/whats-new/dotnet-docs-mod1.md @@ -77,7 +77,7 @@ The following people contributed to the .NET docs during this period. Thank you! - [pkulikov](https://github.com/pkulikov) - Petr Kulikov ![7 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-7-green) - [ErykKorzeniowski](https://github.com/ErykKorzeniowski) - ![5 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-5-green) -- [imehdi7](https://github.com/imehdi7) - ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) +- imehdi7 - ![3 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-3-green) - [smoothdeveloper](https://github.com/smoothdeveloper) - Gauthier Segay ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) - [aleksvujic](https://github.com/aleksvujic) - Aleks Vujić ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) - [andrewreeman](https://github.com/andrewreeman) - Andrew Reeman ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) From 54b37c2ab04f60a4241ff9ad4b066a9606590173 Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:19:24 -0700 Subject: [PATCH 2/2] reset --- docs/fsharp/language-reference/results.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/fsharp/language-reference/results.md b/docs/fsharp/language-reference/results.md index aeedac42db60d..a87611ee56650 100644 --- a/docs/fsharp/language-reference/results.md +++ b/docs/fsharp/language-reference/results.md @@ -62,14 +62,14 @@ let test() = let req1 = { Name = "Phillip"; Email = "phillip@contoso.biz" } let res1 = validateRequest (Ok req1) match res1 with - | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" + | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" | Error e -> printfn $"Error: {e}" // Prints: "My request was valid! Name: Phillip Email: phillip@consoto.biz" let req2 = { Name = "Phillip"; Email = "phillip@bananas.com" } let res2 = validateRequest (Ok req2) match res2 with - | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" + | Ok req -> printfn $"My request was valid! Name: {req.Name} Email {req.Email}" | Error e -> printfn $"Error: {e}" // Prints: "Error: No email from bananas.com is allowed."