* Fix client validation for record types
Server validation for record types uses metadata from parameters
when validating record type properties. However client validation
does not use the parameter to harvest client validation attributes.
In the absence of this change, validation on parameters would require server
round trips which is unexcepted and not at parity with validation applied
to properties on regular classes or record types.
Validation experience with record types is subpar and requires server
round trips.
No. This feature is new to 5.0.
Low. The change is isolated to record types and does not affect other code paths. We have
unit and functional test coverage to verify this change.
* Correctly dispose app after use
* Create data sources "per router" instance.
* Make a global shared order sequence "per router" for conventional and
controller and page routes.
* Create DynamicControllerEndpointSelector and DynamicPageEndpointSelector
instances per data source.
* Record type follow ups:
* Throw an error if a record type property has validation metadata
* Disallow TryUpdateModel on a top-level record type
* Ignore previously specified model value when binding a record type
* Unskip record type tests
* Clean up record type detection
* Update src/Mvc/Mvc.Abstractions/src/Resources.resx
Co-authored-by: James Newton-King <james@newtonking.com>
* Fixup tests
* Update src/Mvc/Mvc.Abstractions/src/ModelBinding/ModelMetadata.cs
* Update src/Mvc/Mvc.Abstractions/src/ModelBinding/ModelMetadata.cs
* Update src/Mvc/Mvc.Abstractions/src/Resources.resx
Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
* Update src/Mvc/Mvc.Core/src/Resources.resx
Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com>
* Guard against client disconnect exceptions that appear when performing ReadFormAsync
Reading the request body may throw an exception. This change adds some extra guards
for this and presents this as a 4xx response rather than a 5xx response.
* Add some tests
* Fixup test
* Add support for model binding DateTime as UTC
Fixes https://github.com/dotnet/aspnetcore/issues/11584
* Make test work in other TZs
* Changes per PR comments
* Cleanup unused exception code path, fix doc comments
* Clean up usage of variables
* Adjust logging to be consistent
* Apply suggestions from code review
* Add support for binding record types
* PR feedback
* PR changes
* Changes per PR comments
* Changes per PR comments
* Update src/Mvc/Mvc.Core/src/Resources.resx
* Apply suggestions from code review
* Add some more tests
* Undo blazor.server.js changes
* Fixup test
* Apply suggestions from code review
Cleaned up error messages. Thanks @jamesnk, I totally overlooked the content.
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: Javier Calvarro Nelson <jacalvar@microsoft.com>
Co-authored-by: James Newton-King <james@newtonking.com>
* 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
Validation attributes such as a CompareAttribute require a container to be configured in ValidationContext. This change
configures uses the controller or page handler instance that the property is being bound on when binding top-level properties.
Fixes https://github.com/dotnet/aspnetcore/issues/4895
* Remove useless src/PackageArchive files
- not used outside 2.x branches
* Improve use of ref/ assemblies
- compile against ref/ assemblies but do not change package metadata
- update the metadata of implementation projects to include the ref/ assembly path
- update `@(ReferenceAssembly)` metadata for Extensions packages, not `@(PackageReference)`
- can be disabled using `$(CompileUsingReferenceAssemblies)` e.g. when generating ref/ projects
- include ref/ projects in source build by default
- remove `$(ExcludeFromSourceBuild)` overrides from ref/ project files
- use latest package references and use project references even when _not_ building the targeting packs
- restore previous `@(Reference)` -> `@(PackageReference)` logic
- add build-only Microsoft.Internal.Extensions.Refs package reference in most cases
- remove IndirectReferences.props and `@(_ExtensionInternalRefAssemblies)`; no longer needed
* Improve ref/ project generation
- use ../src/**/AssemblyInfo.cs files instead of including attributes in *.Manual.cs files
- for same reason, copy `@(InternalsVisibleto)` items from src/ to ref/ projects
- use eng/targets/CSharp.ReferenceAssembly.props instead of ref/Directory.Build.props files
- use TFM-specific *.Manual.cs files in ref/ project files instead of ref/Directory.Build.props files
optimizations and usability improvements:
- add `$(BuildMainlyReferenceProviders)` property to focus on reference providers when generating ref/ projects
- disable `$(UseReferenceAssemblyInImplementation)` to avoid using ref/ projects while generating them
nits:
- clean up whitespace and remove blank lines in ref/ project files
* Perform smaller cleanup
- remove `$(IsTargetingPackPatching)`; use only `$(IsTargetingPackBuilding)`
- remove `$(DisableServicingFeatures)`; enable the servicing features we need
- suppress baseline references even in servicing builds
- restore `$(AdditionalGenApiCmdOptions)`; useful when updating *.Manual.cs files
nits:
- simplify conditions using `$(HasReferenceAssembly)`
- correct spelling in comments
- shorten long lines
* Use a response file for GenAPI commands
- work around dotnet/arcade#4021 and help with additional ref assemblies
- mimic 111462e0c2 and integrate w/ other changes here
* Undo some manual ref/ project changes
- now done automatically or centrally
- remove manual `[TypeForwardedTo]` and `[InternalsVisibleTo]` attributes
- fully qualify a type now that `using` is gone
- remove dupe `@(Compile)` items for *.Manual.cs files; included in the ref/ project files
- remove redundant `$(AllowUnsafeBlocks)` and `$(NoWarn)` settings
nits:
- rename a *.Manual.cs file that's not TFM-specific
- remove `private` members
* Correct use of `@(ProjectReference)` items for reference providers
- use `@(Reference)` instead
* Remove recently-added `@(Compile)` and `@(Reference)` items
- were added due to missing `[InternalsVisibleTo]` attributes in ref/ assemblies or as early workarounds
- plus, now transitive references **Just Work™️**
- expose `ClosedGenericMatcher` in the usual (*.Manual.cs) way
- also undo Microsoft.Extensions.ApiDescription.Server workaround
* Remove `private` members from ref/ *.Manual.cs files
- not useful and bloat the ref/ assemblies
* Cleanup warnings
- avoid "CSC warning CS2008: No source files specified." building site extensions
- correct warnings (as errors) about `RenderToStringResult` being obsolete
- add Microsoft.AspNetCore.SpaServices.Tests to Middleware solution
* Remove `@(RuntimeHostConfigurationOption)` workarounds
- deps files are unaffected by new ref/ assembly handling and test projects aren't special-cased
- also execute a test previously skipped due to deps file problems
* Regenerate ref/ projects
- pick up the latest generation changes
(unclear why Mvc.RazorPages/ref/Microsoft.AspNetCore.Mvc.RazorPages.netcoreapp3.0.cs changed but works)
* Fill in missing `internal` types 1 of n
- rename Microsoft.AspNetCore.Components.netstandard2.0.Manual.cs; need `RenderTreeFrame` type everywhere
- add types needed in unit and perf tests to *.Manual.cs files
* Clean up recent commits
- remove recently-added `private` members
- restore `_dummyPrimitive` fields in Microsoft.AspNetCore.Server.HttpSys.Manual.cs
* Add *.Manual.cs files for more projects
* !fixup! fields in *.Manual.cs `struct`s
- GenAPI sometimes generates `_dummy` and `_dummyPrimitive` fields _instead of_ visible members
- what GenAPI generates sometimes have the right length but actual fields don't hurt
- that is, using the real fields corrects both the visible API and `struct`s' sizes
nits:
- consolidate `namespace`s in Microsoft.AspNetCore.Mvc.Core.Manual.cs
* Remove special case for generating ref/ projects on non-Windows
- referenced issue was closed with no action but workaround still not required
- no tabs in generated content
* Only create ref/ projects for assemblies in the shared framework
- restrict when `$(HasReferenceAssembly)` is `true` by default
- add warnings when `$(IsAspNetCoreApp)` or `$(HasReferenceAssembly)` have unexpected values
* Remove "extra" ref/ projects
- associated implementation projects no longer have `$(HasReferenceAssembly)` set to `true`
* Add a few GenAPI exclusions
- see dotnet/arcade#4488
- generation for these members leads to NREs
* Add more `internal` types and members
- Identity/Core
- Identity/Extensions.Core
- Mvc/Mvc.ViewFeatures
* Add direct dependencies to work around CS1705 errors
- add direct references to some test and sample projects to make intent clear i.e. address CS1705 root cause
- these projects must use implementation assemblies for those direct references
- requirement also applies to anything depending on them e.g. functional tests
- for simplicity, use `$(CompileUsingReferenceAssemblies)` instead of targeted `@(Reference)` metadata
- leads to ~40 projects that do not themselves add ref/ metadata
- this is _not_ transitive i.e. it applies only to projects that override `$(CompileUsingReferenceAssemblies)`
* nits: Remove a few more `private` members in *.Manual.cs files
* !fixup! correct namespaces of a few types in *.Manual.cs files
* Try another way to fix Microsoft.AspNetCore.Blazor.Build.Tests
* Try another way to fix missing targets in Web.JS.npmproj
* Update dependencies from https://github.com/dotnet/arcade build 20190924.3
* Update dependencies from https://github.com/aspnet/Blazor build 20191003.2
* Update dependencies from https://github.com/aspnet/AspNetCore-Tooling build 20191007.2
* Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20191010.4
* Remove potentially unnecessary feeds
* Install the runtime during source build
* Pin m.nc.app.ref
* Add aspnetcore-dev feed back to nuget.config
* Pin internal refs package
* Move efcore internal refs dependency
* Compile against ref assemblies
* Add manually generated internal ref assembly:
* DataProtection
* Kestrel
* Hosting
* Http
* Mvc
* Middleware
* SignalR
* Identity
* Components
* Fix crossgen for ref compilation
* Fix tools for ref compilation
* Explicitly specify ExcludeFromSourceBuild
* Build targeting pack for 3.0.1
* Improve condition for building targeting pack in 3.0.1
* Fixing siteex build for ref compilation
* Resolve reference assemblies from Extensions
* Don't build refPack during source build
* Add big list of project references, for tests to use
* Exclude sources files from indirect references
* The types in these packages will be compiled into the binaries of the projects that directly depended o it
* Add manual indirect references to project references
* Add samples/test assets
* Don't add indirect refs for ProjectRefs with ReferenceOutputAssembly=false
* Fix JSInterop for ref compilation
* Do not substitute ext ref assemblies in ref pack
* Disable the TestFramework assembly attribute from Logging.Testing
There's custom logic in ProjectTemplates.Tests to use a different TestFramework instead
* Fix Functional tests
* Issues caused by incorrect deps files working around this via test infrastructure instead
* Mvc
* Analyzers
* StaticFiles
* SignalR
* HttpOverrides
* Introduce ValueProviderException analogous to InputFormatterException
* Record ValueProviderException as a model state error
* Fixup bug in reading ProblemDetails \ ValidationProblemDetails using the converter
Fixes https://github.com/aspnet/AspNetCore/issues/10291
* [Blazor] Allows multiple components as entry points
* Removes all overloads that register a component statically with aborts
selector.
* Updates render component to have a RenderMode parameter that indicates
how the component must render. Valid values are Static, Server, and
ServerPrerendered.
* When using Server or ServerPrerendered we emit marker comments into
the page that are later used by blazor.server.js to bootrstrap a
blazor server-side application.
Fixes: #12553
This change renames all of our browser/DOM specific types from
`UIFooEventArgs` to `FooEventArgs` and puts the in the `.Web` namespace.
In addition to this, we're moving `EventHandlers` and `BindAttributes`
to the same. This has the impact of scoping the mappings those classes
provide based on the `.Web` namespace.
This means that we now expect `.Web` to be present as a using in
basically all contexts for a browser-based Blazor app. Updated
templates, samples and tests. I'll also need to update about a million
tests in the compiler codebase.
I've logged https://github.com/aspnet/AspNetCore.Docs/issues/13832 to
track the docs and release notes part of this work.
* Ensure JsonSerializer always HTML encodes output.
* Update JsonOptions.JsonSerializerOptions to use encoder scheme that does not encode non-ASCII
characters by default. This makes the encoding comparable to Json.NET's defaults
* In SystemTextJsonHelper, ensure that the content is always HTML-encoded
* Unskip skipped test
Fixes https://github.com/aspnet/AspNetCore/issues/9946
Fixes https://github.com/aspnet/AspNetCore/issues/11459
* Rename IUriHelper -> NavigationManager
- Remove IUriHelper interface
- Rename to NavigationManager
- Remove all traces of old naming
There's no functional or design change in this commit - just removing
all traces of the old name. The next few iterations will try to improve
the design.
* Minor API tweaks to NavigationManager
Making Initialize protected causes problems because right now the
server-side code needs to deal with one of two different
implementations, hence an exchange type is used. I followed the same
pattern that was used for auth for symmetry but I have some *cool*
thoughts.
- We can remove this when we remove stateful prerendering
- I have another idea to banish this pattern to the land of wind and
ghosts
If this ends up sticking around longer than a week in the code, lets
discuss other ideas and try to improve the pattern.
* Use hub method for server-side navigation
* Get rid of async local
* Add hub method test
* Misc bikeshedding
* Update src/Components/Server/src/Circuits/DefaultCircuitFactory.cs
Co-Authored-By: campersau <buchholz.bastian@googlemail.com>
* PR feedback
Fixes: #12245Fixes: #12630
This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.
This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.