diff --git a/src/AttributeRouting.Specs/AttributeRouting.Specs.csproj b/src/AttributeRouting.Specs/AttributeRouting.Specs.csproj index 38851ae..b251d81 100644 --- a/src/AttributeRouting.Specs/AttributeRouting.Specs.csproj +++ b/src/AttributeRouting.Specs/AttributeRouting.Specs.csproj @@ -76,7 +76,10 @@ ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\lib\net40\System.Web.Http.WebHost.dll - + + False + ..\packages\Microsoft.AspNet.Mvc.3.0.20105.1\lib\net40\System.Web.Mvc.dll + diff --git a/src/AttributeRouting.Specs/Features/RouteConstraints.feature b/src/AttributeRouting.Specs/Features/RouteConstraints.feature index c3c5d10..e3fb6ad 100644 --- a/src/AttributeRouting.Specs/Features/RouteConstraints.feature +++ b/src/AttributeRouting.Specs/Features/RouteConstraints.feature @@ -164,3 +164,5 @@ Scenario Outline: Matching inline route constraints in the querystring | Querystring?x=abc | Querystring | is not | | Querystring?y=hello | Querystring | is not | | QuerystringOptional | QuerystringOptional | is | + | QuerystringDefault | QuerystringDefault | is | + | QuerystringDefault?x=123 | QuerystringDefault | is | diff --git a/src/AttributeRouting.Specs/Features/RouteConstraints.feature.cs b/src/AttributeRouting.Specs/Features/RouteConstraints.feature.cs index dbadea5..b8a6bff 100644 --- a/src/AttributeRouting.Specs/Features/RouteConstraints.feature.cs +++ b/src/AttributeRouting.Specs/Features/RouteConstraints.feature.cs @@ -3,7 +3,7 @@ // This code was generated by SpecFlow (http://www.specflow.org/). // SpecFlow Version:1.9.0.77 // SpecFlow Generator Version:1.9.0.0 -// Runtime Version:4.0.30319.18034 +// Runtime Version:4.0.30319.18052 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -316,6 +316,8 @@ public virtual void MatchingInlineRouteConstraints(string url, string action, st [NUnit.Framework.TestCaseAttribute("Querystring?x=abc", "Querystring", "is not", null)] [NUnit.Framework.TestCaseAttribute("Querystring?y=hello", "Querystring", "is not", null)] [NUnit.Framework.TestCaseAttribute("QuerystringOptional", "QuerystringOptional", "is", null)] + [NUnit.Framework.TestCaseAttribute("QuerystringDefault", "QuerystringDefault", "is", null)] + [NUnit.Framework.TestCaseAttribute("QuerystringDefault?x=123", "QuerystringDefault", "is", null)] public virtual void MatchingInlineRouteConstraintsInTheQuerystring(string url, string action, string condition, string[] exampleTags) { TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Matching inline route constraints in the querystring", exampleTags); diff --git a/src/AttributeRouting.Specs/Subjects/InlineRouteConstraintsControllers.cs b/src/AttributeRouting.Specs/Subjects/InlineRouteConstraintsControllers.cs index 46aae18..6e22162 100644 --- a/src/AttributeRouting.Specs/Subjects/InlineRouteConstraintsControllers.cs +++ b/src/AttributeRouting.Specs/Subjects/InlineRouteConstraintsControllers.cs @@ -39,6 +39,12 @@ public string QuerystringOptional(int x, string y) return ""; } + [GET("QuerystringDefault?{x:int=1}")] + public string QuerystringDefault(int x) + { + return ""; + } + [GET("Alpha/{x:alpha}")] public string Alpha(string x) { diff --git a/src/AttributeRouting.Specs/packages.config b/src/AttributeRouting.Specs/packages.config index e979864..cffa6a9 100644 --- a/src/AttributeRouting.Specs/packages.config +++ b/src/AttributeRouting.Specs/packages.config @@ -1,5 +1,6 @@  + diff --git a/src/AttributeRouting.Web.Http/Framework/HttpAttributeRoute.cs b/src/AttributeRouting.Web.Http/Framework/HttpAttributeRoute.cs index 24b06ec..5c15691 100644 --- a/src/AttributeRouting.Web.Http/Framework/HttpAttributeRoute.cs +++ b/src/AttributeRouting.Web.Http/Framework/HttpAttributeRoute.cs @@ -98,6 +98,9 @@ public override IHttpRouteData GetRouteData(string virtualPathRoot, HttpRequestM return null; } + // Add querystring default values if applicable. + _visitor.AddQueryStringDefaultsToRouteValues(routeData.Values); + // Constrain by querystring param if there are any. var routeValues = new HttpRouteValueDictionary(routeData.Values); if (!_visitor.ProcessQueryStringConstraints((constraint, parameterName) => ProcessConstraint(request, constraint, parameterName, routeValues, HttpRouteDirection.UriResolution))) diff --git a/src/AttributeRouting.Web.Mvc/AttributeRouting.Web.Mvc.csproj b/src/AttributeRouting.Web.Mvc/AttributeRouting.Web.Mvc.csproj index 3445cce..b895e6d 100644 --- a/src/AttributeRouting.Web.Mvc/AttributeRouting.Web.Mvc.csproj +++ b/src/AttributeRouting.Web.Mvc/AttributeRouting.Web.Mvc.csproj @@ -55,7 +55,10 @@ True ..\packages\Microsoft.AspNet.WebPages.1.0.20105.408\lib\net40\System.Web.Helpers.dll - + + False + ..\packages\Microsoft.AspNet.Mvc.3.0.20105.1\lib\net40\System.Web.Mvc.dll + True ..\packages\Microsoft.AspNet.Razor.1.0.20105.408\lib\net40\System.Web.Razor.dll diff --git a/src/AttributeRouting.Web.Mvc/Framework/AttributeRoute.cs b/src/AttributeRouting.Web.Mvc/Framework/AttributeRoute.cs index ae5d950..5f351f8 100644 --- a/src/AttributeRouting.Web.Mvc/Framework/AttributeRoute.cs +++ b/src/AttributeRouting.Web.Mvc/Framework/AttributeRoute.cs @@ -91,6 +91,9 @@ public override RouteData GetRouteData(HttpContextBase httpContext) return null; } + // Add querystring default values if applicable. + _visitor.AddQueryStringDefaultsToRouteValues(routeData.Values); + // Constrain by querystring param if there are any. if (!_visitor.ProcessQueryStringConstraints((constraint, parameterName) => ProcessConstraint(httpContext, constraint, parameterName, routeData.Values, RouteDirection.IncomingRequest))) { diff --git a/src/AttributeRouting.Web.Mvc/packages.config b/src/AttributeRouting.Web.Mvc/packages.config index 77411dd..cc65639 100644 --- a/src/AttributeRouting.Web.Mvc/packages.config +++ b/src/AttributeRouting.Web.Mvc/packages.config @@ -1,5 +1,6 @@  +