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 @@
+