Commit Graph

286 Commits

Author SHA1 Message Date
Ryan Nowak d4b96b27c0 Optimize RouteValueDictionary, expose concrete type
This change optimizes allocations by RouteValueDictionary based on usage.

First, implement a struct Enumerator, and expose the concrete RVD type
from all extensibility points. We wanted to try and decouple this code
from RVD originally and use IDictionary everywhere. After doing that we've
found that it allocates an unacceptable number of enumerators.

Secondly, optimize copies of RVD for the case where you're copying an RVC
to another (common case). When doing this we can copy the count to get the
right capacity, and copy the entries without allocating an enumerator.

Lastly, optimize RVD for the case where it's a wrapper around a poco
object. We 'upgrade' to a writable full dictionary if you try to write to
it, or call one of a number of APIs that are uncommonly used. We could
produce optimized versions of things like `Keys` and `CopyTo` if necessary
in the future.
2015-11-25 09:49:10 -08:00
Pranav K cad81fa608 Updating tests to use moq.netcore 2015-11-23 12:24:35 -08:00
John Luo 825f82d7e0 Reacting to ApplicationServices removal from HttpContext 2015-11-19 09:40:46 -08:00
Ajay Bhargav Baaskaran 4d69ad0db2 Moved AttributeRouting from MVC 2015-11-17 12:03:12 -08:00
Ajay Bhargav Baaskaran cef221f57a Added Template property to RouteTemplate 2015-11-12 15:28:02 -08:00
John Luo 83f20ece7d Reacting to RequestDelegate namespace change 2015-10-30 13:58:05 -07:00
Ryan Nowak a5727dc932 Incorporate StringSegment from primitives 2015-10-08 12:44:59 -07:00
Ryan Nowak 371d4e62da Remove string.Split from routing
This change removes the call to string.Split and a few substrings, and
replaces it with a tokenizer API. The tokenizer isn't really optimized
right now for compute - it should probably be an iterator- but it's a
significant improvement on what we're doing.
2015-10-06 10:21:00 -07:00
Pranav K 2f8dba6659 Renaming Microsoft.Framework.* -> Microsoft.Extensions.* 2015-10-03 15:44:48 -07:00
Anthony van der Hoorn 59b698c8b2 Expose parsed route so that observers can get extra details about the route (i.e. optional state) 2015-09-23 09:00:28 -07:00
Pranav K c6941e797f Replacing NotNullAttribute with exceptions 2015-09-11 15:08:04 -07:00
N. Taylor Mullen 5ec25174ff Update project.json to have warningsAsErrors accept a bool. 2015-09-02 15:34:53 -07:00
Hao Kung 3cab10cfd7 React to options rename 2015-09-02 13:55:39 -07:00
Pranav K fe9bf8bcbf Remove the use of Regex in the TemplateRouteParser
Fixes #164
2015-08-03 11:13:57 -07:00
Pranav K ae27f7d321 Updating InlineRouteParameterParserTests to perform Assert.Equal \
Assert.Collection instead of Assert.Single.

This gives more accurate failures in case the assertions fail.
2015-07-29 18:27:12 -07:00
Mugdha Kulkarni ddfe5e9736 Adding more test cases before removing RegEx for parameter matching 2015-07-21 15:09:15 -07:00
Ajay Bhargav Baaskaran 0882a393a4 Removed unwanted logging for non-matching routes 2015-06-23 10:53:58 -07:00
Ajay Bhargav Baaskaran b135a9d53b [Fixes #188] Added support for AppendTrailingSlash in RouteOptions 2015-06-19 11:46:25 -07:00
Chris R e30ca4d673 React to Http namespace changes. 2015-05-07 13:59:32 -07:00
Doug Bunting efe39e43f5 Remove test the `[NotNull]` move makes irrelevant 2015-05-06 14:47:05 -07:00
Kiran Challa f2e6c294b0 Address feedback for PR: https://github.com/aspnet/Routing/pull/182 2015-05-05 12:39:32 -07:00
N. Taylor Mullen 352732fc62 Update LICENSE.txt and license header on files. 2015-05-01 13:59:22 -07:00
Kiran Challa 1f6d3fe4cc Fix RouteValueDictionary to handle read-only dictionaries. 2015-05-01 11:55:01 -07:00
Chris Ross b5fd971562 Handle Http.Core rename. 2015-04-16 14:36:48 -07:00
Kiran Challa 1c66e0a317 Cleanup logging
- Removed existing logger scopes as we want to minimize the number of scopes being created.
- Cleaned up tests related to removal of scopes.
- Added new log statements.
- Removed old logger structure base implementation and related tests. Added new tests also.
2015-04-08 14:20:36 -07:00
Kiran Challa 6e18fc2f74 Reacting to ILogger api changes 2015-04-04 01:24:42 -07:00
Doug Bunting 9d35441ac3 Add another `<Service/>` item 2015-04-02 22:56:56 -07:00
Doug Bunting 458a0f6809 Update .xproj files for Microsoft.Web.AspNet.* -> Microsoft.DNX.* rename 2015-04-02 13:49:28 -07:00
ianhong ff209f04bb Should GetVirtualPath returns PathString 2015-03-22 19:39:20 -07:00
ianhong 3693002b02 Introducing VirtualPathData for IRouter.GetVirtualPath 2015-03-19 21:59:20 -07:00
Hao Kung 0db1f1a42f React to hosting 2015-03-19 21:02:35 -07:00
sornaks 37dc8581de Removing 'Options' from the 'ConfigureRouteOptions' extension method name. 2015-03-16 14:54:36 -07:00
N. Taylor Mullen 2bd73523f6 Update xunit.runner.kre => xunit.runner.aspnet. 2015-03-12 16:10:07 -07:00
N. Taylor Mullen 81c43301d3 Update .kproj => .xproj. 2015-03-11 14:04:11 -07:00
N. Taylor Mullen 2973795a6e Remove BOM from project.json, *.cmd, *.sh and *.shade files. 2015-03-09 12:58:37 -07:00
N. Taylor Mullen da775351e2 Update aspnet50/aspnetcore50 => dnx451/dnxcore50. 2015-03-08 12:55:34 -07:00
Brennan 3e99d38dbb Logging.Testing namespace change 2015-03-06 09:48:36 -08:00
Brennan c2a89b14a2 Removing Null* using Testing Null* classes 2015-03-04 19:59:31 -08:00
Brennan 859a0d62b8 Logging API changes 2015-03-04 19:59:23 -08:00
Hao Kung 979b75dda4 React to DI changes 2015-03-04 18:06:42 -08:00
Brennan be7984eebc Logging test objects were copy-pasta from logging repo, removing and using official version 2015-02-25 12:58:51 -08:00
Mugdha Kulkarni 81a17300b2 Issue 140: Support lower case routes 2015-02-20 14:54:25 -08:00
Luke Waters f41b6e4d10 other interface implementation 2015-02-19 15:14:41 -08:00
Luke Waters b0b1bb3032 fixing logging interface change 2015-02-19 15:03:29 -08:00
Mugdha Kulkarni f9a9b80681 Fixing the error message. The error message for malformed template was too complex listing all
the errors that can happen in one message. I have separated the message in 2 different messages.
 1. When there is a parameter or a literal following the optional parameter.
 2. when optional parameter is preceded by a literal other than period which is not allowed.
2015-02-16 17:40:04 -08:00
Ryan Nowak 9ee946073a Add support for best-effort link-generation
This change adds a feature needed for aspnet/Mvc#302

There's a new option in routing that allows link-generation to proceed
when the route values cannot be validated. The key scenario for this is
during development of an MVC site. Routing will refuse to generate a link
to actions which don't exists, this is a breaking change from the MVC5
behavior. Setting UseBestEffortLinkGeneration will allow routing to return
a value even when we can't match the action.

This option will remain off by default - setting this to on will impact
link-generation in a bunch of scenarios involving areas where we've
improved the logic for MVC6. If you're considering leaving this on outside
of development scenarios, then make sure to be as explicit with route values
as possible (don't rely on ambient values).

Functional tests to follow up in the MVC repo.
2015-02-11 14:38:30 -08:00
Mugdha Kulkarni 4e5fc2e2dd Fixing Routing Issue: 136
The RegEx inline constraint doesn't take care of Escape characters.
2015-02-10 11:16:30 -08:00
sornaks 67dcdbf8a1 Issue #1669: Adding extension method ConfigureRouteOptions. 2015-02-03 16:18:19 -08:00
Doug Bunting c59366e8a7 Quick cleanup
- `DefaultInlineConstraintResolver` has no need of a `IServiceProvider`

nits:
- add doc comments for changed `DefaultInlineConstraintResolver` ctor
- let VS add a dev server port to sample's .kproj
- add debugSettings.json and .vs/ to .gitignore
2015-01-30 10:02:58 -08:00
Pranav K 29a5cb8aa9 Change the namespace for the MapRoute extension 2015-01-23 16:08:38 -08:00
Mugdha Kulkarni 3626900bc9 Basic URL Extension functionality working.
1. Template parser now allows a parameter to be an optional parameter in a complex segment if
   it is the last and only optional parameter and it is followed by a period.
2. Template matcher modified to take into consideration the optional parameter in the complex
   segment. Also the period shouldn't be present if the optional parameter is not present
2015-01-16 16:25:53 -08:00
Chris Ross 5e55833168 Handle PipelineCore rename. 2015-01-15 14:27:53 -08:00
Ryan Nowak c323e4d32f Updating routing to use official xunit runner 2014-12-15 16:11:17 -08:00
Mugdha Kulkarni f549a550a9 Fixing the issue #123.
Added OptionalRouteConstraint class to take care of optional inline parameter. It will create the OptionalRouteConstraint for a inline parameter that is optional with real constraint on the parameter as inner constraint of OptionalRouteConstraint.
2014-12-04 10:54:27 -08:00
Victor Hurdugaci 8b93a0c018 Add schema version to kproj files 2014-11-25 11:01:35 -08:00
Hao Kung 21a6f44c38 GetDefaultServices -> AddRouting with TryAdd 2014-11-24 16:37:10 -08:00
Doug Bunting 3b0e289387 Apply VS' FormatDocument and RemoveAndSort to all *.cs files
- #EngineeringDay
- this repo was relatively clean
2014-11-20 10:09:28 -08:00
Doug Bunting 1a101d7815 Delete trailing whitespace
- #EngineeringDay
- Total replaced: 105  Matching files: 44 in *.cs files
- Total replaced: 27  Matching files: 1 in all other files
2014-11-20 09:40:12 -08:00
Ryan Nowak 01345eca91 Fix for #92 - Make Constraints, DataTokens, and Defaults readonly
The properties on TemplateRoute for DataTokens and Defaults are now
readonly. This prevents modifying these collections in a way that
invalidates cached data, or violates thread-safety.

To do the same for constraints, this change includes a substantial refactor
of how we realize inline constraints, and moves the constraint resolver
out of the parsing phase.

This allow creates a builder for the constraint map, that will make it
easier to implement features like optional constraints, and is reusable
for anyone building their own type of routing system.
2014-11-18 11:24:25 -08:00
SonjaKhan 673854b060 renaming TraceType to LogLevel 2014-11-05 10:47:42 -08:00
Ryan Nowak 08c591c74b Fix for #104 - RouterMiddleware should take ILoggerFactory in the
constructor

Did some cleanup here to make these tests work on CoreCLR. They weren't
using Moq for anything important.
2014-11-03 12:38:17 -08:00
Ryan Nowak 87f0bbb092 adding tests 2014-10-31 16:00:04 -07:00
Ryan Nowak d78e5478a7 Fix for #65,116 - Implement 'stack of routers'
This is the routing part of the fix. MVC will be updated as well
(attribute routing).

As the graph of routers is traversed, routers add themselves to the
current 'path', which unwinds on a failed path.

This mechanism is opt-in. Whoever adds something needs to remove it as
part of cleanup. If a router in the tree doesn't interact with the
.Routers property, then there are no consequences for those that do.

Additionally, fixing #116 as part of the same change. This means that we
create a nested 'RouteData' and then restore it on the way out. This is
simpler than just dealing with the .Routers property in isolation.
2014-10-31 14:07:35 -07:00
jacalvar 02a0a218b9 [Fixes #90] RouteTemplate does not take RouteData
Changed the implementation of route template to merge the existing route data
with the values obtained from parsing the request path with the given template.

Restored original route data values in case the route template data does not match.
2014-10-22 13:22:11 -07:00
Pranav K e0f01aa6bb Remove unnecessary references from project.json 2014-10-17 17:49:31 -07:00
Stephen Halter fff1d62f01 Change GetService calls to GetRequiredService
GetRequiredService throws for missing services like GetService used to.
2014-10-17 15:31:57 -07:00
Hao Kung 30a4ee1ce1 React to EnsureRoutingServices fix 2014-10-14 21:03:16 -07:00
Hao Kung 86dcbfd0d1 React to options and hosting changes
Uses EnsureRequestServices to force RequestServices to be created
2014-10-14 19:09:15 -07:00
Harsh Gupta 3b19de0e42 Fixing #106 2014-10-14 17:51:15 -07:00
SonjaKhan 2a8ac595d8 Refactoring ILogger, see aspnet/Logging#3 2014-10-14 10:20:58 -07:00
jacalvar 3ff9d6e8a0 [Fixes #108] Disallow the use of '*' in route parameter names 2014-10-13 15:55:02 -07:00
Pranav K e8de0f9d6e Updating System.Text.RegularExpressions version 2014-10-10 14:01:37 -07:00
Pranav K 91a11a9dfe Reacting to CLR package versioning changes 2014-10-10 10:34:07 -07:00
Hao Kung 3e4a412b21 React to options change 2014-10-08 12:56:01 -07:00
David Fowler 964e84e57b Fixup references 2014-10-05 12:30:20 -07:00
Pranav K 7dc6019839 Adding quotes around boolean value in project.json to make
JavaScriptSerializer on Mono happy
2014-09-22 11:38:34 -07:00
Pranav K dcd921005c Updating tests to run on Mono
Fixes #95
2014-09-22 11:19:13 -07:00
David Fowler 4a8de5dad4 Updated to use the new target framework in project.json 2014-09-04 01:50:07 -07:00
David Fowler 81e905cfa9 Updated to use the new target framework in project.json 2014-08-28 23:45:58 -07:00
harshgMSFT 70402c8f2c Adding RegexInlineRouteConstraint 2014-08-15 17:32:25 -07:00
Louis DeJardin b9baae4693 Implementing ILoggerFactory.AddProvider 2014-08-15 16:15:03 -07:00
David Fowler 966d6dd016 Removed source files from the project 2014-08-15 09:26:26 -07:00
harshgMSFT efdd3054d2 Adding DataTokens Support. 2014-08-11 11:59:00 -07:00
harshgMSFT 5b849596bb Fix for Issue#55 Changing Template->RouteTemplate 2014-08-06 16:14:50 -07:00
Ben Brown fca9831115 Routing Logging
Added scoped logging to RouterMiddleware, RouteCollection, and
TemplateRoute.
2014-08-01 13:59:48 -07:00
Ryan Nowak 61436fb7d1 Revert "Revert "Fix for issue 85 - Dictionary types should return null on key not found""
This is reverting the revert. We're going to go ahead with this change and
work around it in MVC.

This reverts commit 0e826e69e6.
2014-07-31 15:01:03 -07:00
Ryan Nowak 0e826e69e6 Revert "Fix for issue 85 - Dictionary types should return null on key not found"
This is causing issues with routing functional tests in CoreCLR. Suspect
CoreCLR compat issue.

This reverts commit ae65001e84.
2014-07-25 14:35:36 -07:00
Ryan Nowak ae65001e84 Fix for issue 85 - Dictionary types should return null on key not found
This change makes RouteValueDictionary a full IDictionary implementation
instead of a subclass of Dictionary.

Followed the patterns used in the old implementation, namely preserving
the struct-returning behavior of Keys/Values/GetEnumerator.
2014-07-25 13:17:52 -07:00
Ryan Nowak 3eb6c22330 Make RoutePartsEqual public. 2014-07-15 14:25:05 -07:00
Pranav K fab9ffd208 Reacting to System.Collections version change 2014-07-14 15:22:43 -07:00
David Fowler f696a06012 Renamed configurations to frameworks in project.json 2014-07-13 22:00:44 -07:00
Ryan Nowak 27d6a735af Implement a 'required' constraint
This is useful for a variety of interesting scenarios in link generation
where a default value doesn't appear in the route template as a parameter.

This can be used to implement the desired behavior for areas - where the
'area' key is sticky.
2014-07-08 16:23:14 -07:00
Ryan Nowak 63dcdd6ca5 Fix for #77 - pass ambient values not in the template to constraints
This change adds tests and makes the behavior consistent with legacy MVC
as far as what values are visible in constraints.

This is important because it allows constraints to make decisions based on
whether or not a value is present even if it's not in the template. This
is similar to the behavior of WebAPI link generation or Area link
generation in MVC 5 - but without hardcoding.
2014-07-08 10:18:00 -07:00
Brice Lambson a0a0db9856 Bump version to 1.0.0-* 2014-06-19 16:46:05 -07:00
harshgMSFT fbffcb7b40 Adding Remaining Inline Route Constraints. 2014-06-18 16:29:49 -07:00
harshgMSFT a499d4a92a Routing DI Changes II : Adding services for routing. 2014-06-06 17:08:01 -07:00
Ryan Nowak d10682d15b Issue aspnet/Mvc#56 - merging RouteContext and RequestContext
This is the routing part of these changes, and just the breaking changes
parts.

Follow-ups will add:
- DataTokens
- Tracking the logical stack of routers
2014-06-06 10:11:57 -07:00
Ryan Nowak 1d4ceef81b Turning on warnings as errors for routing 2014-06-04 18:42:41 -07:00
harshgMSFT 1d3e41560c Routing DI Changes I:
Moving out Default Handler and IInlineConstraintResolver from RouteCollection.
	These are moved to a new interface IRouteBuilder, (instead of an IInlineConstraintResolver, it takes in an IServiceProvider).
	This means all RouteCollectionExtensions are moved to RouteBuilderExtensions.
2014-06-03 16:50:48 -07:00
harshgMSFT 5dc8267920 Adding Tests for InlineRouting Support. 2014-05-30 12:56:04 -07:00
harshgMSFT 187d8e4911 Support for InlineConstraints in Route Template 2014-05-30 12:28:14 -07:00
David Fowler bde341caed Fixed project.json casing 2014-05-26 02:51:56 -07:00
Pranav K d8da964e88 Updating kproj file to match tooling changes 2014-05-18 20:13:56 -07:00
Andrew Peters feb150570a Updating copyright headers 2014-05-08 23:01:29 -07:00
Wei Wang 96568362ea Sort dependencies and remove duplicates in dependencies 2014-05-07 17:47:44 -07:00
Ryan Nowak 8fcddc12e7 Incorporate name changes 2014-05-05 16:54:45 -07:00
anpete 51317a7039 Update file headers 2014-05-01 17:41:33 -07:00
harshgMSFT 950ce56ea5 Adding Support for NamedRoutes.
- Interface Changes.
- RouteCollectionExtensions
- Tests for Named Routes
2014-04-30 11:23:54 -07:00
David Fowler 23c11bc950 Updated to use the new tooling 2014-04-08 01:37:06 -07:00
Ryan Nowak 798145418f Add a verify call to a test 2014-04-02 18:58:39 -07:00
Ryan Nowak 87a47f50cc Passing more data to on GetVirtualPath
For link generation to areas, we need to provide the set of values that
the route could potentially provide.

Basically if we know what action we want to reach, we want to know whether
or not a given route could hit that action before giving it the OK to
generate a link.

For instance a route like '{controller}' couldn't hit an action like
'HomeController:DoACoolThing', since it can never provide a value for
'action'. This makes it possible for WebFX to make the right decision
without changing the behavior of any of the routing constructs. This also
has the side-effect of removing a class of order dependencies in routing
that cause bad links to be generated.
2014-03-31 12:05:47 -07:00
Pranav K 90864bcd9c Fixing broken project.json 2014-03-31 11:25:56 -07:00
Yishai Galatzer 3e7d8d54f9 CR Feedback
Added and renamed tests
2014-03-31 09:32:47 -07:00
Yishai Galatzer ff5d919e0d Remove unused usings 2014-03-31 09:31:50 -07:00
Yishai Galatzer cd0528b1b2 Link generation related tests 2014-03-31 09:31:49 -07:00
Yishai Galatzer 77ef7a5cde RouteConstraints Step II + III
Include Url Generation support
Add unit tests
Clean issues found by unit tests
2014-03-31 09:31:48 -07:00
David Fowler 2b87a625d9 Updated clr packages 2014-03-29 01:15:28 -07:00
Yishai Galatzer a917cbd577 Constraints 2014-03-27 10:58:14 -07:00
Ryan Nowak cf16d6cba7 Small refactor of TemplateBinder
We'll need to access the accepted values to do proper link generation, so
separating this process out into 2 parts.

Also moving defaults into the TemplateBinder because they are conceptually
part of the route, not part of the request. I'll do the same for
TemplateMatcher soon, but it's a big change and worth separating.
2014-03-26 18:44:57 -07:00
Ryan Nowak e1a8b5e140 Update xunit in text project and add k10 version 2014-03-17 14:48:35 -07:00
Ryan Nowak da057820e5 Rename BindPath (CR Feedback) 2014-03-10 10:02:57 -07:00
Ryan Nowak d52e000f30 Removing old comments about ancient bug numbers 2014-03-06 16:34:09 -08:00
Ryan Nowak 83eb6c4d22 Small bugfix in routing 2014-03-06 16:23:48 -08:00
Ryan Nowak f604fb8d87 CR feedback again 2014-03-06 12:18:31 -08:00
Ryan Nowak f43985b58d CR feedback 2014-03-06 11:27:37 -08:00
Ryan Nowak d2a3bd3490 CR feedback 2014-03-05 20:41:22 -08:00
Ryan Nowak 5d34a61bd9 API changes for Routing 2014-03-05 16:48:10 -08:00
Ryan Nowak cd73fac433 Adding API for consuming url generation 2014-03-05 13:28:44 -08:00
Ryan Nowak 89eb6e6445 Some extra resiliance and tests! Oh glorious tests. 2014-03-05 11:27:06 -08:00
Ryan Nowak 4022e5a5a4 Code dump of algorthmic code for url generation
This doesn't yet expose url generation via public api, that will come in
the next change.
2014-02-28 12:47:42 -08:00
Ryan Nowak 4f71137cbd CR feedback 2014-02-24 13:01:08 -08:00
Ryan Nowak 64c29fe813 Adding optional parameters 2014-02-19 12:02:02 -08:00
Ryan Nowak 179841743e updating OM of routing, about 10% better perf 2014-02-07 18:28:54 -08:00
Ryan Nowak 85225055b9 removing datatokens/constraints/url-generation 2014-02-07 18:28:53 -08:00
Ryan Nowak d4904e8701 Adding legacy rounting code - mostly unmodified to get it into history 2014-02-07 18:28:51 -08:00
Ryan Nowak 9f9f92d18a Adding skeleton sample and test project 2014-01-30 11:07:52 -08:00