Commit Graph

607 Commits

Author SHA1 Message Date
Kristian Hellang 2421ae8c83 Add IStatusCodeActionResult (#8265)
* Add IStatusCodeActionResult
* Add unit test for explicitly implemented property on StatusCodeResult
2018-08-13 15:39:20 -07:00
Pranav K 9da8e2c908 Ensure UnsupportedContentTypeFilter runs before ModelStateInvalidFilter
Both UnsupportedContentTypeFilter and ModelStateInvalidFilter use ModelState to
determine the response. UnsupportedContentTypeFilter returns a more specific
response and should execute earlier than the latter filter.

Fixes #8236
2018-08-10 10:39:13 -07:00
Kiran Challa 9585084258 Using Routing feature branch versions 2018-08-07 13:38:36 -07:00
James Newton-King 47f2f451e3
EnableEndpointRouting documentation (#8220) 2018-08-07 09:22:33 +12:00
Kiran Challa c16f86f0ef React to Routing repo's api changes 2018-08-03 16:25:41 -07:00
James Newton-King d4472f08ed
Remove legacy EnableGlobalRouting option (#8214) 2018-08-04 09:58:00 +12:00
James Newton-King ac410b76d9
Change MvcEndpointInfo to internal (#8210) 2018-08-03 16:30:57 +12:00
Pranav K ce8fc29728 ConsumesAttribute accepts requests without content type
Fixes #8174
2018-08-02 16:27:23 -07:00
Pranav K 0989231ed5 Make structs readonly 2018-08-02 15:44:09 -07:00
Ryan Nowak 2b289d2f2c Use MatcherPolicy for Consumes 2018-08-01 19:05:04 -07:00
James Newton-King 44f5b54f5f
React to routing API review (#8194) 2018-08-02 13:37:43 +12:00
James Newton-King 046af405b6
Rename global routing to endpoint routing (#8179) 2018-08-01 15:05:49 +12:00
Justin Kotalik 367717760b
Handle subtype with suffix being a subtype without a suffix (#8170) 2018-07-30 12:05:41 -07:00
Pranav K 0102d4efab
Introduce ApiConventionMethodAttribute
Fixes #8147
2018-07-30 11:13:25 -07:00
Ryan Nowak fbae57cde1 React to the removal of EndpointConstraint 2018-07-28 19:03:16 -07:00
James Newton-King c01c7075be
Add EndpointMetadata to ActionDescriptor and hookup CORS (#8158) 2018-07-28 16:12:54 +12:00
Doug Bunting 556880872d
Ensure later validations of `null` models do not overwrite `Invalid` state
- #8078
2018-07-26 13:49:22 -07:00
James Newton-King f31ab716ee
Change MvcEndpointDataSource to use GetChangeToken (#8137) 2018-07-26 09:20:26 +12:00
Kiran Challa 10ce77b9ca Updated MvcEndpointDataSource to create endpoints with SuppressLinkGenerationMetadata 2018-07-25 06:41:57 -07:00
James Newton-King c08504b08a
MVC startup experience (#8131) 2018-07-25 14:30:51 +12:00
Kiran Challa 3df34dbbfe React to Routing repo's LinkGenerator api changes 2018-07-24 05:20:53 -07:00
Ryan Nowak 196e3f109f React to Routing branding
This is a reaction PR for the branding changes in progress in Routing.

This can be merged after the changes to in to Routing.
2018-07-22 19:47:15 -07:00
Ryan Nowak 5c488bf09c make feature branch build 2018-07-20 12:57:43 -07:00
Ryan Nowak 3ba6f35495 React to RoutePattern changes in Routing 2018-07-20 12:57:43 -07:00
Kristian Hellang 53930af0e3 Set ProblemDetails status field during ObjectResult formatting 2018-07-19 17:57:55 -07:00
James Newton-King ec8976ffaf
Update MvcEndpointDataSource on raised change token (#8108) 2018-07-19 16:43:24 +12:00
James Newton-King badbcb9437
Add MvcEndpointDataSource benchmarks (#8104) 2018-07-18 15:48:18 +12:00
Kiran Challa 0caacb8217 React to LinkGenerator api changes 2018-07-17 05:24:27 -07:00
James Newton-King 42218d5fb5
Versioning with endpoint constraint (#8098) 2018-07-17 16:37:45 +12:00
Pranav K 9d951325b2
Re-organize shared src packages so we can do true IVT between src assemblies 2018-07-16 11:15:58 -07:00
Doug Bunting 35fad0881b
Mark unused `ParameterBinder.BindModelAsync(...)` overloads as `[Obsolete]`
- #7660
- also addresses part of #7317, only in `ComplexTypeModelBinderIntegrationTest`
2018-07-13 13:26:56 -07:00
Doug Bunting f2608c2ff4
Do not suppress `ModelValidationState.Invalid` entries
- #7992, #7963
2018-07-13 13:21:43 -07:00
James Newton-King f12f9b46ed
Add startup filter to set MiddlewareFilterBuilder.ApplicationBuilder 2018-07-13 12:23:30 +12:00
Hao Kung a5083d525b
Fix regression with Authorize + IPolicyProvider (#8068) 2018-07-12 15:36:03 -07:00
Pranav K 46189abda7 Refactoring for ApiConvention analyzers 2018-07-12 14:26:27 -07:00
James Newton-King a67d9363e2
Consumes endpoint constraint (#8057) 2018-07-12 16:35:33 +12:00
James Newton-King 183ecd85d6
Fix MVC integration with UseEndpoint (#8047) 2018-07-11 11:47:33 +12:00
Pranav K 1e7be641ae Add some common aliases for conventions
Fixes #8015
2018-07-09 18:25:29 -07:00
Kiran Challa 0812279464 Merge branch 'release/2.1' into kichalla/21.to.22.mergecommit
# Conflicts:
#	build/dependencies.props
#	korebuild-lock.txt
#	src/Microsoft.AspNetCore.Mvc.ApiExplorer/DefaultApiDescriptionProvider.cs
#	test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ApiBehaviorApplicationModelProviderTest.cs
#	version.props
2018-07-09 13:00:10 -07:00
Kiran Challa bd995d4cb1 [Fixes #7959] Conventional routing with custom templates not working when you have area attributes 2018-07-09 12:35:14 -07:00
Pranav K d2bb674b0a
Add support for default response (#8028)
* Add support for default response

Fixes #6828
2018-07-06 16:44:07 -07:00
Pranav K 335500ab0e Use ModelMetadata from actual types for validation
Fixes https://github.com/aspnet/Mvc/issues/7952
2018-07-02 11:23:16 -07:00
Zbginiew Dobras f6befb9ed3 Added ObjectResult implementation for Unauthorized response 2018-06-29 14:27:34 -07:00
Kiran Challa 54c14b8782 Reacting to Routing repo's EndpointFinder changes 2018-06-28 12:40:04 -07:00
kishanAnem e1af5b8b6d Array or List in query string does not get parsed #7712 (#7967)
- exclude collections when detecting complex types in `ApiBehaviorApplicationModelProvider`
- add test cases
2018-06-26 11:43:46 -07:00
Pranav K 94a7c83998
Change DefaultApiConventions (#7939)
* Change DefaultApiConventions

* Introduce attributes for matching by name and type.

* Move discovery of ApiConventionAttribute to ApiBehaviorApplicationModelProvider. This is required
for us to detect during startup if the convention is incorrectly authored.
2018-06-25 08:24:30 -07:00
Pranav K 6911e192e4
Add IsRequired and DefaultValue to ApiParameterDescription 2018-06-22 06:51:58 -07:00
Pranav K 17d2545b55
Throw if the type parameter for ActionResult<T> is an action result (#7942)
Fixes #7931
2018-06-21 07:51:12 -07:00
Pranav K 4f7e849cc1
Setting up for ApiConventionAttribute analyzers (#7912)
* Setting up for ApiConventionAttribute analyzers
2018-06-20 15:22:53 -07:00
James Newton-King 3547341762
Add support for conventional routes with dispatching (#7928) 2018-06-20 09:02:52 +12:00
Kiran Challa a0a9c2c585 Integrate Dispatcher's link generator
Related to https://github.com/aspnet/Routing/issues/530
2018-06-19 04:14:05 -07:00
Kiran Challa 6df28ef09a Reach to Dispatcher changes and fix build break 2018-06-15 09:30:07 -07:00
Ryan Brandenburg 7eac72ae46 Set 2.1 baselines 2018-06-14 11:09:28 -07:00
Ryan Brandenburg 78fc49ba0c Set 2.1 baselines 2018-06-14 11:09:19 -07:00
James Newton-King a7406d4497
Add MvcEndpointDataSource and functional tests (#7886) 2018-06-14 11:03:45 +12:00
Pranav K 287a3c5e69 Allow IgnoreAntiForgeryToken applied on Razor Page models to work
Fixes #7795
2018-06-13 11:59:47 -07:00
Pranav K 6c2ef122f8 Add support for conventions in DefaultApiDescriptionProvider 2018-06-11 16:07:09 -07:00
Kiran Challa 2d63669695 [Fixes #7609] ApiBehaviorApplicationModelProvider overwrites existing BindingInfo in entirety when inferring binding sources 2018-05-30 05:30:10 -07:00
Pranav K 984cd46c4d Fix ActionMethodExecutor incorrectly setting DeclaredType on ObjectResult
Fixes #7782
2018-05-29 14:35:42 -07:00
Ryan Brandenburg edf4e8fd9e DataAnnotations of Enum values use DataAnnotationLocalizerProvider 2018-05-25 16:00:00 -07:00
Kiran Challa 418aac57f4 [Fixes #7609] ApiBehaviorApplicationModelProvider overwrites existing BindingInfo in entirety when inferring binding sources 2018-05-24 14:28:42 -07:00
Pranav K 49c653ed0b Infer BindingSource.FormFile for IEnumerable<IFormFile>
Fixes #7770
2018-05-22 11:05:09 -07:00
Pranav K e1eaf6a6e0
Cleanup TestCommon 2018-05-18 10:45:57 -07:00
Pranav K 624a5ed522 Fix ActionMethodExecutor incorrectly setting DeclaredType on ObjectResult
Fixes #7782
2018-05-18 10:43:28 -07:00
Pavel Krymets a736441ca5
Enable analyzers (#7789) 2018-05-18 10:26:42 -07:00
Kiran Challa 4472c00c6f PR feedback fixes for logging requestpredicate shortcircuit logging 2018-05-17 11:17:29 -07:00
Kiran Challa d80471ad15 Added logging to model binding requestpredicate shortcircuit 2018-05-15 14:13:03 -07:00
Pranav K bda5ea9df0 Cleanup BindingInfo \ ModelMetadata coalescing in ModelBinderFactory
Fixes #7583
2018-05-08 10:24:18 -07:00
Pranav K dfd9b17f68
More keynotfound avoidance 2018-05-07 11:08:41 -07:00
Pranav K f35deb71f9 Prevent KeyNotFound when logging 2018-05-07 10:50:26 -07:00
Jass Bagga e0188c4936
Modify info level logging for pages (#7733)
Addresses #7602
2018-05-04 13:47:48 -07:00
Pranav K 777782ac6e Test cleanup 2018-05-03 16:03:42 -07:00
Kiran Challa 19c41c0494 Revert "[Fixes #6902] Added an overload for StatusCode that takes in System.Net.HttpStatusCode"
This reverts commit c567a690bc.

[Fixes #7709] Revert https://github.com/aspnet/Mvc/pull/6902
2018-05-01 13:27:57 -07:00
Pranav K 5d5222cdd8 Introduce BindPropertiesAttribute
* Allow controller and Razor Page models to be annotated with BindPropertiesAttribute
* Disallow BindPropertyAttribute from being declared on types.
* Do not allow arbitrary binding attributes to be applied to Razor Page models.

Fixes #7686
2018-04-20 14:32:14 -07:00
Kiran Challa 4f7d53f4e7 [Fixes #7658] FileStreamResultExecutor fails to Dispose FileStream 2018-04-18 11:43:09 -07:00
Doug Bunting e0e96ce53b
Include parameter type's attributes in ModelMetadata
- #7595
- #7595 relates to #7350 but does not have the same root cause
  - did _not_ revert the src changes in #7350 fix (d995b0418a)
- make non-`[Obsolete]` `ModelAttributes` constructor overload `internal`
  - should generally use `static` methods and not any constructor
  - change some unit tests to use `[Obsolete]` constructor overloads (with suppressions)
- fix test `ParameterBinderExtensions` to use current `ParameterBinder.BindModelAsync(...)` overload
  - found some tests updated `IModelMetadataProvider`, `MvcOptions`, etc. instances but didn't register them in DI
- extend `ModelBindingTestHelper` and `ModelBindingTestContext`
  - reorder some tests to use correct `MvcOptions` and `IModelMetadataProvider` everywhere
  - fixes above issues

nits:
- take a few VS suggestions
- remove an old comment indended only for PR "Reviewers:"
2018-04-17 12:40:38 -07:00
Doug Bunting cc5ae02b7d
Fix binding & validating dictionaries of non-simple types in jQuery requests
- #7423
- retry failed inner bindings with alternate syntax in `ModelStateDictionary`
  - use property syntax if first attempt tried index syntax and visa versa
- instantiate `ShortFormDictionaryValidationStrategy` with full `ModelState` keys
  - can now provide exact `ModelState` keys that `ModelStateDictionary` used in inner bindings
- normalize model names without a leading period in `JQueryKeyValuePairNormalizer`

nits:
- take a few VS suggestions
2018-04-14 10:41:00 -07:00
Kiran Challa d5e044f693 [Fixes #7373] Assigning to the context's Result property, when implementing IPageFilter, causes an exception 2018-04-13 15:11:44 -07:00
Pranav K d995b0418a Allow BindPropertyAttribute to be specified on controller classes
Fixes #7350
2018-04-13 13:58:44 -07:00
Pranav K e34b4e8335
Use DependencyContext.CompileLibraries to determine dependency graph (#7626)
* Use DependencyContext.CompileLibraries to determine dependency graph

Fixes https://github.com/aspnet/Mvc/issues/7617
2018-04-11 15:57:11 -07:00
Kiran Challa 62272ad56a Round off file result's LastModifiedDate to whole seconds for correct comparison with http header dates
[Fixes #7572] PhysicalFileResult does not respond 304 Not Modified
2018-04-11 06:43:50 -07:00
flash2048 39053a5e22 Corrects spelling of some comments 2018-04-09 14:37:20 -07:00
Pranav K ec31ff0c28
Throw if multiple Body bound parameters are discovered
Fixes #6963
2018-04-09 11:20:34 -07:00
Pranav K 5e019bd707
Add Microsoft.AspNetCore.All
Fixes https://github.com/aspnet/Mvc/issues/7605
2018-04-06 10:57:59 -07:00
Pranav K c515cece8e Use ModelMetadataProvider to infer BindingSource on application model 2018-04-02 09:48:49 -07:00
Kristian Hellang a16504b941 Added failing test for #7546 2018-04-02 09:48:49 -07:00
Ryan Nowak f20bf9ea02 Fix #7503 change to model name for IValidableObject
This change undoes a breaking change introduced by the 2.1 model
validation changes. Now an implementation of IValidableObject on a
top-level model will be called correctly with the 'empty' prefix instead
of the parameter name.

When fixing this we undid a workaround for another issue.

When validating a parameter that didn't bind we didn't correctly compute
the model name for 'fallback to empty prefix' cases.

(cherry picked from commit 7a1096a72b)
2018-03-29 21:35:59 -07:00
Ryan Nowak d360886b78 Fix #7558 infer [FromRoute] with parameter in ANY route
This changes the logic for when we infer [FromRoute] on an action
parameter from *ALL* to *ANY*.

This means that if a parameter occurs in any route on an ApiController,
we will treat it as [FromRoute]. We think this is the best decision
because it's less ambiguous. If a parameter appears in a route, it won't
be eligible to be bound from query. I think that's good.

If for some reason you want this kind of behavior (route or query) then
we suggest breaking up the actions. This isn't very documentation
friendly (swagger) so we don't suggest it.
2018-03-29 07:54:39 -07:00
Doug Bunting fc3a815e57
Restore `ModelMetadata.PropertyName != null` behaviour
- #7413 part 2 of 2
- add `ModelMetadata.Name` and `ParameterName`
  - use `Name` instead of `PropertyName` in most cases
- update `ModelMetadata.ContainerType` and other property use
  - choose using `MetadataKind` almost everywhere; support all possibilties
    - usually parameter metadata was possible but not handled
    - worst case was one or two potential NREs, especially `ContainerType.*` dereferences
  - improve `MvcCoreLoggerExtensions` metadata handling
    - add three new debug messages, one for type metadata and two for parameter metadata
- update `ModelMetadata.ContainerMetadata`, `ContainerType` and `PropertyName` doc comments
- no changes needed in Microsoft.AspNetCore.Mvc.ViewFeatures because parameters aren't viewed

nits:
- add missing `TestModelMetadataProvider.ForParameter(...)` method
- remove unused `EmptyModelMetadataProvider` instances in `ModelMetadataTest`
- refactor `ModelValidationResultComparer` out of DataAnnotationsModelValidatorTest`
- take VS suggestions, mostly related to variable inlining and object initializers
2018-03-29 07:22:00 -07:00
Ryan Nowak c93c168df3 Add mapping service for action results
This allows the use of custom 'envelope' types like ActionResult<> with
a corresponding API Explorer implementation.

Basically this PR services to decouple a bunch of infrastructure from
ActionResult<>.
2018-03-27 17:13:41 -07:00
Kiran Challa 0c084fa28a [Fixes #7518] NullReferenceException thrown when Controller method uses Guid parameter default value 2018-03-27 05:22:20 -07:00
Doug Bunting 5e245da326
Add compatibility switch controlling parameter metadata and top-level validation
- #7413 part 1 of 2
- made all `ModelMetadataProvider` and `ObjectModelValidator`-specific code conditional
  - fortunately, `MvcOptions` easy to get; affected code is primarily `internal` or pub-`Internal`
  - remove unnecessary `ModelMetadataProvider` use in `ApiBehaviorApplicationModelProvider`
- run integration and functional tests with `CompatibilityVersion.Version_2_1`
  - functional test change depends on @javiercn's recent #7541 fix
  - remove test code now redundantly turning compatibility switches on

nits:
- correct spelling errors in `CompatibilitySwitch`
- take VS suggestions, mostly in test code
- rename methods in `ControllerBinderDelegateProviderTest` to match current API
- slightly refactor in `ApiBehaviorApplicationModelProvider`
2018-03-26 12:29:04 -07:00
Ryan Nowak 1ff5bdca79 Set model prefix for [ApiController]
Infers the 'empty' model prefix for complex types that are read from the value
providers. This gives us better defaults when using the parameter object
pattern with respect to swagger/API explorer.
2018-03-23 14:49:54 -07:00
Pranav K 1d6c09ab31 Make the use of Assembly.CodeBase more robust 2018-03-23 09:35:55 -07:00
Pranav K 56501cb8a0 Cleanup ApplicationPartFactory 2018-03-23 09:35:55 -07:00
Ryan Brandenburg 8590bb9367 Updating baselines 2018-03-22 14:39:58 -07:00
Pranav K ccb6793126
Introduce LifecycleProperty
Update TempDataAttribute infrastructure to use LifecycleProperty
2018-03-22 10:18:36 -07:00
Pranav K d6176ac7de ApplicationPartFactory: The works 2018-03-21 15:40:15 -07:00
Doug Bunting 390ebbb258
Do not bind `"[index]"` in `CollectionModelBinder` subsetting feature
- #7091
- add `IKeyRewriterValueProvider` to remove rewritten keys or value providers containing such keys
  - similar to `IBindingSourceValueProvider` except `CompositeValueProvider` keeps non-implementers around
- remove `after.Order == before.Order` special cases
  - a premature optimization that could lead to lost inner provider replacements
  - rework `EnumerableValueProviderTest` to ease test override in `CompositeValueProviderTest`
- add `EmptyValueProvider` fields to reduce `CompositeValueProvider` allocations

nits:
- remove Linq use in `CompositeValueProvider`
- do not create an unnecessary dictionary in `CompositeValueProvider.Filter(...)` methods
- accept VS suggestions, mostly pattern matching
2018-03-19 12:53:05 -07:00
Jass Bagga ed18a8f975
Seal ActionResultOfT (#7507) 2018-03-19 12:52:31 -07:00