Commit Graph

350 Commits

Author SHA1 Message Date
Chris Ross (ASP.NET) f5538cba6f Merged PR 9144: [5.0-preview8] Pass RequestAborted to SendFileAsync
This is a cherry pick of the 3.1 PR.
https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore/pullrequest/9042

The only change was to remove a questionable call to Abort after catching the exception.

There are some less severe issues in Kestrel and MVC that we'll follow up on publicly after this releases.
2020-07-17 23:07:49 +00:00
Doug Bunting 5266918ed2
Use Roslyn to create ref/ assemblies (#23403)
* Remove all ref/ projects

* Remove GenAPI infrastructure

* Remove notion of a reference assembly project
  - remove `$(IsReferenceAssemblyProject)`, `$(ReferenceReferenceAssemblies)` and `$(ReferenceImplementationAssemblies)`
    - remove unnecessary `$(NoWarn)` settings

nits:
- remove a few misleading comments
- wrap some long lines

* Move .0 package version workaround into Versions.props
  - touch up SharedFramework.External.props

* Expose `%(LatestPackageReference.RTMVersion)` metadata
  - automate use of properties in the `@(LatestPackageReference)` item group to make this maintainable
    - add a couple of special cases at the bottom of eng/Dependencies.props
    - add one more `$(...PackageVersion)` property to avoid yet-another special case

* Enable Roslyn reference assemblies
  - exclude ref/ assembly from packages other than targeting pack
  - update Microsoft.AspNetCore.App.Ref.csproj
    - `%(IsReferenceAssembly)` and `%(ReferenceGrouping)` metadata no longer relevant
    - only ref/ assemblies are in `@(ReferencePathWithRefAssemblies)` item group

nits:
  - remove now-unnecessary workaround
    - issues with TFM transition are behind us
  - clean up Microsoft.AspNetCore.App.Runtime.csproj slightly
    - use `GeneratePathProperty="true"`
        - reorder item / property settings for meta-expansion
    - correct spelling errors and phrasing in comments

* Update documentation to reflect recent changes
  - remove CrossRepoBreakingChanges.md; was tied to old TeamCity infrastructure
    - also much less relevant given repo merges
  - adjust details and examples in ReferenceResolution.md
    - reflect repo merges, Dependencies.props changes, and current Maestro++ channels
    - add a few more details e.g. specific files where Version.Details.xml versions are used

* !fixup! Remove another irrelevant doc file

* !fixup! Address PR review suggestions
  - convert a couple of warnings to errors
  - use consistent casing for Microsoft.NETCore.App.Runtime.* packages
  - reduce `%(LatestPackageReference.Version)` metadata special cases
  - add and improve comments e.g.
    - improve comments about `$(*V0PackageVersion)` properties
    - improve placement of comments about item removal in ResolveReferences.targets
    - confirmed `$(*V0PackageVersion)` property list is complete

nits:
- fix solution example in ReferenceResolution.md
- remove item group definition for `@(LatestPackageReference)`
- remove `%(LatestPackageReference.VersionName)` metadata after use; large item group
    - similarly, remove `%(LatestPackageReference.RTMVersion)` when not needed; just complicates `Condition`s

When I squash, I must remember this fixes
- #14801
- dotnet/aspnetcore-internal#2693

* Actually use `%(LatestPackageReference.RTMVersion)` metadata
  - gather RTM package references in a new project
    - a (very) separate project to work around package conflict resolution
    - empty `Test` target works around Arcade's testing approach
  - new target in ResolveReferences.targets updates relevant assembly paths to use the RTM packages
    - done as soon as possible after `ResolvePackageAssets` determines the paths
    - done for all compilation inputs, not just ref/ assemblies
2020-07-17 13:35:17 -07:00
Kevin Pilch 3117f43c33
Migrate to single sln file + slnf files (#23581) 2020-07-08 15:27:22 -07:00
Kevin Pilch 1da13e6501
Enable FxCop Analyzers for the repo (#23709)
All rules are currently disabled, except for one that I enabled for
src/Http via a new ".editorconfig" file I added there.

Other changes:

* Allow editorconfigs in MVC and Razor to flow to the root
* Consolidate a few editorconfig settings
* Tweak Ruleset config in Azure/AzureAD where it clashed.

Addresses the beginning of #9620, but it's a fair chunk of work to
enable most rules through the whole repo. That can be done directory by
directory and rule by rule by dropping .editorconfig files though.
2020-07-08 15:26:22 -07:00
Pranav K 93634cd772
Follow ups for nullable (#23736)
* Follow ups for nullable

* Update src/Http/Routing/src/Matching/DfaMatcherBuilder.cs

Co-authored-by: James Newton-King <james@newtonking.com>

Co-authored-by: James Newton-King <james@newtonking.com>
2020-07-07 21:46:50 +00:00
Martin Costello 54bd692c78
Use TryGetValue() in TokenExtensions (#23708) 2020-07-06 22:27:59 -07:00
Pranav K 8750cd1038
Nullable followup for Routing (#23474)
* Nullable followup for routing.

* Update nullability based on usage
* Use nullable enable in a few files

* More nullable
2020-07-07 03:24:20 +00:00
Martin Costello fd1f1c3559
Use preferred overloads of string.Split() (#23712)
* Use preferred overloads of string.Split

* Revert TrimEntries for netstandard2.0

Revert usage of StringSplit.TrimEntries for projects that target netstandard2.0.

Co-authored-by: Levi Broderick <levib@microsoft.com>
2020-07-06 16:49:38 -07:00
Stephen Halter 0bc8ad7e6e
Change HttpRequest/ResponseJsonExtensions namespace (#23496) 2020-07-06 11:28:57 -07:00
Chris Ross 8182bb16a9
Disable cookie name encoding/decoding. (#23579) 2020-07-02 16:20:55 -07:00
James Newton-King 01de355289
Don't set StatusCode in WriteAsJsonAsync (#23583) 2020-07-02 09:48:05 +12:00
dotnet-maestro[bot] a4dd539b40
[master] Update dependencies from dotnet/runtime (#23563)
* Update dependencies from https://github.com/dotnet/runtime build 20200630.14

System.ComponentModel.Annotations , System.Diagnostics.DiagnosticSource , System.Diagnostics.EventLog , Microsoft.Extensions.Logging , Microsoft.Extensions.Logging.Abstractions , Microsoft.Extensions.Logging.Configuration , Microsoft.Extensions.Logging.Console , Microsoft.Extensions.Logging.Debug , Microsoft.Extensions.Logging.EventLog , Microsoft.Extensions.Logging.EventSource , Microsoft.Extensions.Logging.TraceSource , Microsoft.Extensions.Options , Microsoft.Extensions.Options.ConfigurationExtensions , Microsoft.Extensions.Internal.Transport , Microsoft.Extensions.Options.DataAnnotations , Microsoft.Extensions.Primitives , Microsoft.Extensions.Http , Microsoft.Extensions.Hosting , Microsoft.Extensions.Caching.Abstractions , Microsoft.Extensions.Caching.Memory , Microsoft.Extensions.Configuration , Microsoft.Extensions.Configuration.Abstractions , Microsoft.Extensions.Configuration.Binder , Microsoft.Extensions.Configuration.CommandLine , Microsoft.Extensions.Configuration.EnvironmentVariables , Microsoft.Extensions.Configuration.FileExtensions , Microsoft.Extensions.Hosting.Abstractions , Microsoft.Extensions.Configuration.Ini , Microsoft.Extensions.Configuration.UserSecrets , Microsoft.Extensions.Configuration.Xml , Microsoft.Extensions.DependencyInjection , Microsoft.Extensions.DependencyInjection.Abstractions , Microsoft.Extensions.DependencyModel , Microsoft.Extensions.FileProviders.Abstractions , Microsoft.Extensions.FileProviders.Composite , Microsoft.Extensions.FileProviders.Physical , Microsoft.Extensions.FileSystemGlobbing , Microsoft.Extensions.HostFactoryResolver.Sources , Microsoft.Extensions.Configuration.Json , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.Platforms , Microsoft.Win32.Registry , Microsoft.Win32.SystemEvents , Microsoft.NETCore.App.Internal , Microsoft.NETCore.App.Ref , System.Drawing.Common , System.Security.Principal.Windows , System.ServiceProcess.ServiceController , System.Text.Encodings.Web , System.Text.Json , System.Threading.Channels , System.Windows.Extensions , System.Security.Permissions , System.Security.Cryptography.Xml , System.Security.Cryptography.Pkcs , System.IO.Pipelines , System.Net.Http.Json , System.Net.Http.WinHttpHandler , System.Net.WebSockets.WebSocketProtocol , System.Reflection.Metadata , System.Runtime.CompilerServices.Unsafe , System.Security.Cryptography.Cng
 From Version 5.0.0-preview.8.20328.6 -> To Version 5.0.0-preview.8.20330.14

* React to obsoletion

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Pranav K <prkrishn@hotmail.com>
2020-07-01 15:57:26 +00:00
Filip Staffa e1d4728d90
Fix HeaderSegmentCollection failing when header value has a trailing space (#23159)
Co-authored-by: Filip Staffa <git@filipstaffa.net>
2020-06-30 15:05:54 -07:00
Pranav K 7da6931209
Revert "Undo use of pipewriter in FileBufferingWriteStream (#21833)" (#23391)
This reverts commit 48261fdada.
2020-06-30 06:22:33 -07:00
Pranav K a44c1ad78c
Fix null reference errors in tests (#23091)
Fixes https://github.com/dotnet/aspnetcore/issues/22992
2020-06-18 11:05:54 -07:00
Doug Bunting c4c6e25a06
Add missing doc files and cleanup nits (#22931)
* nit: Remove useless `$(HasReferenceAssembly)` settings
  - set in /Directory.Build.targets
    - `true` only in `$(IsAspNetCoreApp)` projects
* nit: Remove useless `$(CompileUsingReferenceAssemblies)` settings
  - no current versioning differences between ref/ and src/ assemblies when targeting default TFM
* Add more `$(GenerateDocumentationFile)` settings
  - increases the number of generated doc files, mostly without problems
- !fixup! correct typo in `DebugProxyHost` doc comments
    - was not generating a doc file before
  - remove previous (ineffective) src/Components/Directory.Build.targets setting
  - nit: remove a duplicate `$(GenerateDocumentationFile)` setting
* nit: Remove useless `$(IsPackable)` settings
  - only analyzers and implementation projects are packable by default
    - main use case for explicit setting is projects shipping only in shared framework
  - conditional setting in src/Mvc/Directory.Build.props just subset logic in /Directory.Build.targets
* nit: Remove useless `$(IsProjectReferenceProvider)` settings
  - only implementation projects are providers by default
* nit: Remove useless `$(IsTestAssetProject)` settings
  - set in src/Mvc/test/WebSites/Directory.Build.props
* !fixup! Looks like `InProcessNewShimWebSite` must compile w/o ref/ assemblies
  - restore `$(CompileUsingReferenceAssemblies)` in this one project
2020-06-17 13:04:45 -07:00
ZeBobo5 b8d090b983
Fix #23038 (#23039) 2020-06-17 06:50:31 -07:00
Pranav K 8efcca43ce
Annotate Microsoft.AspNetCore.Http with nullable attributes (#22928)
* Annotate Microsoft.AspNetCore.Http with nullable attributes

* Annotate Hosting with nullable
2020-06-15 23:29:19 +00:00
Pranav K c30638b829
Fixup nullable (#22861) 2020-06-12 15:32:41 +00:00
Pranav K 596f93324d
Fix nullable build warning (#22838) 2020-06-11 20:48:55 +00:00
Pranav K 0794d6077d
Make AuthenticateAsync return non-null result (#22708)
* Make AuthenticateAsync return non-null result

* NoResult
2020-06-09 17:05:26 +00:00
Ondřej Štorc 9ce4a970a2
Parsing extension-av on Set Cookie header (#22181) 2020-06-09 08:48:39 -07:00
Pranav K 6188933c89
Fixup warnings in test (#22665) 2020-06-08 19:39:50 +00:00
Pranav K cd81d48766
Add nullable to WebUtilities (#22543) 2020-06-08 17:48:43 +00:00
Pranav K 6e54e06cfa
Add nullable to Auth.Abstractions, and Auth.Core (#22541) 2020-06-06 21:43:39 +00:00
Pranav K f37fa30683
Add nullable annotations to Http.Abstractions, Http.Features, Connections.Abstractions (#22337)
* Add nullable annotations to Http.Abstractions, Http.Features, Connections.Abstractions

Co-authored-by: James Newton-King <james@newtonking.com>
2020-06-05 06:54:07 -07:00
Hao Kung 8e4dadc0dd
Add certificate validation cache (#21847) 2020-06-05 00:58:47 -07:00
msftbot[bot] 912ab2bcb3
Merge pull request #22453 from dotnet-maestro-bot/merge/release/5.0-preview6-to-master
[automated] Merge branch 'release/5.0-preview6' => 'master'
2020-06-03 02:41:08 +00:00
Doug Bunting 256045729a
Add `SuccessfulTests` to ensure something runs in every non-Helix run (#22406)
* Remove extra `[SkipOnHelix]` attribute
- only need the one compiled into Microsoft.AspNetCore.Testing
- update the documentation to reflect this
  - nit: address Markdown warnings that VS Code showed

* Add `SuccessfulTests` to ensure something runs in every non-Helix runs
- #22241
- cleans up hundreds of warnings but leaves a couple for the Blazor tests assembly
  - see comments about xUnit runner command line in the new class
2020-06-02 12:19:28 -07:00
James Newton-King 4c7e313c89
Add JSON extension methods to request and response (#21731) 2020-06-01 21:00:50 -07:00
Kahbazi 5cfebf260f
Use ReferenceEquals in HttpMethodMatcherPolicy (#21277) 2020-05-17 16:28:36 +00:00
Justin Kotalik 54b10629bd
Merge pull request #21791 from dotnet-maestro-bot/merge/release/3.1-to-master 2020-05-15 08:35:28 -07:00
Pranav K 48261fdada
Undo use of pipewriter in FileBufferingWriteStream (#21833) 2020-05-14 12:38:49 -07:00
Justin Kotalik 6725c718db
Update Microsoft.AspNetCore.Http.Abstractions.csproj 2020-05-14 10:13:45 -07:00
John Luo 8fba9b0c90 Use ActivatorUtilities shared source 2020-05-13 22:23:30 -07:00
N. Taylor Mullen f9b4101852 Merge remote-tracking branch 'origin/release/3.1' 2020-05-13 17:27:44 -07:00
Doug Bunting de38479e5f
Improve build reliability (#20760)
* Improve build reliability
  - ensure `ResolveCustomReferences` target executes before packages are used
  - `ResolveAssemblyReferences` and `ResolveAssemblyReferencesDesignTime` targets run too late
    - e.g. failed builds of Microsoft.AspNetCore.WebUtilities or Microsoft.AspNetCore.Hosting when building from root
  - add `GetReferenceProjectTargetPathMetadata` for ease of use as well as reliability
    - avoids extra work to get existing metadata (ref/ projects execute no tasks in this target)

  nit: rename `@(ReferenceProjectMetadata)` -> `@(ReferenceProjectTargetPathMetadata)`

* Ensure `GetTargetPathMetadata` target runs with `$(TargetFramework)` set
  - ref/ projects all multi-target and otherwise no-op this target

* Revert "Fix various "Type or namespace not found" errors (#20736)"
  - change is no longer needed with other fixes in this PR

  This reverts commit 8218d6e0e7.
2020-05-13 11:31:09 -07:00
Ryan Nowak b194b6c90a
Fix use of precedence in endpoint routing DFA (#20801) (#21200)
* Fix use of precedence in endpoint routing DFA

Fixes: #18677
Fixes: #16579

This is a change to how sorting is use when building endpoint routing's graph of
nodes that is eventually transformed into the route table. There were
bugs in how this was done that made it incompatible in some niche
scenarios both with previous implementations and how we describe the
features in the abstract.

There are a wide array of cases that might have been impacted by this
bug because routing is a pattern language. Generally the bugs will involve a
catch-all, and some something that changes ordering of templates.

Issue #18677 has the simplest repro for this, the following templates
would not behave as expected:

```
a/{*b}
{a}/{b}
```

One would expect any URL Path starting with `/a` to match the first
route, but that's not what happens.

---

The change supports an opt-in via the following AppContext switch:

```
Microsoft.AspNetCore.Routing.UseCorrectCatchAllBehavior
```

Set to true to enable the correct behavior.

---

The root cause of this bug was an issue in how the algorithm used to be
build the DFA was designed. Specifically that it uses a BFS to build the
graph, and it uses an up-front one-time sort of endpoints in order to
drive that BFS.

The building of the graph has the expectation that at each level, we
will process **all** literal segments (`/a`) and then **all** parameter
segments (`/{a}`) and then **all** catch-all segments (`/{*a}`). Routing
defines a concept called *precedence* that defines the *conceptual*
order in while segments types are ordered.

So there are two problems:

- We sort based on criteria other than precedence (#16579)
- We can't rely on a one-time sort, it needs to be done at each level
(#18677)

---

The fix is to repeat the sort operation at each level and use precedence
as the only key for sorting (as dictated by the graph building algo).

We do a sort of the matches of each node *after* building the
precedence-based part of the DFA, based on the full sorting criteria, to
maintain compatibility.

* Add test
2020-05-13 11:12:14 -07:00
David Fowler 5c6f97b9ef
Made changes to FileBufferWriteStream (#21223)
* Made changes to FileBufferWriteStream
- Make the internal FileStream write only
- Make a new readable stream over the same file in DrainBufferAsync to copy data to the buffer.
- Added an overload to DrainBufferAsync into a PipeWriter and use this overload in the 2 formatters in MVC. This should reduce the amount of copying from the internal buffer and reduces pinning (since these buffers are already pinned)
- Improved formatter tests
2020-04-28 23:22:39 -07:00
Ryan Nowak 80861f1da9
Fix use of precedence in endpoint routing DFA (#20801)
* Fix use of precedence in endpoint routing DFA

Fixes: #18677
Fixes: #16579

This is a change to how sorting is use when building endpoint routing's graph of
nodes that is eventually transformed into the route table. There were
bugs in how this was done that made it incompatible in some niche
scenarios both with previous implementations and how we describe the
features in the abstract.

There are a wide array of cases that might have been impacted by this
bug because routing is a pattern language. Generally the bugs will involve a
catch-all, and some something that changes ordering of templates.

Issue #18677 has the simplest repro for this, the following templates
would not behave as expected:

```
a/{*b}
{a}/{b}
```

One would expect any URL Path starting with `/a` to match the first
route, but that's not what happens.

---

The root cause of this bug was an issue in how the algorithm used to be
build the DFA was designed. Specifically that it uses a BFS to build the
graph, and it uses an up-front one-time sort of endpoints in order to
drive that BFS.

The building of the graph has the expectation that at each level, we
will process **all** literal segments (`/a`) and then **all** parameter
segments (`/{a}`) and then **all** catch-all segments (`/{*a}`). Routing
defines a concept called *precedence* that defines the *conceptual*
order in while segments types are ordered.

So there are two problems:

- We sort based on criteria other than precedence (#16579)
- We can't rely on a one-time sort, it needs to be done at each level
(#18677)

---

The fix is to repeat the sort operation at each level and use precedence
as the only key for sorting (as dictated by the graph building algo).

We do a sort of the matches of each node *after* building the
precedence-based part of the DFA, based on the full sorting criteria, to
maintain compatibility.

* Add test
2020-04-21 22:48:27 -07:00
Sébastien Ros b243ae1615
Fixing QueryCollection property documentation (#20044)
* Fixing QueryCollection property documentation

* Update src/Http/Http/src/QueryCollection.cs

Co-Authored-By: Chris Ross <Tratcher@Outlook.com>

Co-authored-by: Sourabh Shirhatti <shirhatti@outlook.com>
Co-authored-by: Chris Ross <Tratcher@Outlook.com>
2020-04-15 22:28:43 +00:00
dotnet-bot 4f307c40be Merge in 'release/3.1' changes 2020-04-15 19:43:15 +00:00
David Fowler 1b99352ec7
Don't re-use DefaultHttpContext if IHttpContextAccessor is in use (#15049) (#20844)
* Don't re-use DefaultHttpContext if IHttpContextAccessor is in use
- Consumers may still get null or an ODE but will never end up with data from a different request.
- Make sure an ODE is thrown from all properties on HttpContext after the request is over.
2020-04-15 12:41:59 -07:00
dotnet-bot e3bd613f37 Merge in 'release/3.1' changes 2020-04-14 18:01:07 +00:00
William Godbe 8218d6e0e7
Fix various "Type or namespace not found" errors (#20736)
* Add manual packageReferences where needed

* Add more explicit packageRefs

* Fix typo

* undo changes to blazor.server.js

* Fix typo

* Don't gen ref assemblies in CodeCheck
2020-04-14 10:57:26 -07:00
Thomas Levesque 5d914d4d2d
Implement HttpRequestStreamReader.ReadToEndAsync (#18232) 2020-04-13 23:40:21 -07:00
Alessio Franceschelli e3d3da3546
HttpRequestStreamReader overrides for Read Span, ReadAsync Memory, ReadLine and ReadLineAsync (#18802) 2020-04-13 08:18:12 -07:00
Chris Oliver b463e049b6
Move BadHttpRequestException to Http.Abstractions (#20339) 2020-04-06 14:42:16 -07:00
James Newton-King b53179267a Merged PR 6773: Fix routing policy exit destination
**Description**

An infinite loop can happen in routing if there is a catch all route with host name matching.

This problem is caused by the DFA matcher builder giving an incorrect exit destination to policies. Currently the exit destination is the catch all state, so the policy will transition to itself when there is no match. It will run again, transition to itself again, run again, etc. This causes the policy to run forever.

What should happen is the host name policy fails, it transitions to the final state with no candidates, and the route matcher does not match any endpoints. The browser is returned a 404 status.

**Customer Impact**

This problem shows up in this situation:
1. If a customer has configured a catch all route in their app
2. The catch all route has host matching
3. A browser makes a request to the server that matches the catch all route but doesn't match the host name

The route matcher will run forever, using up a threadpool thread. When threadpool threads are exhausted the server will stop responding.

**Regression?**

No.

**Risk**

Medium. The fix is simple but route matching is complex, and routing runs with every request.
2020-04-02 20:30:18 +00:00
Kevin Pilch f34033a415 Add .vsconfig files in root and beside slns 2020-03-31 14:25:44 -07:00