<div dir="ltr">I fixed this but Github is currently down :(<div><br></div><div>I'll submit my fix as a pull request once Github is back up.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Dec 22, 2012 at 7:32 PM, Daniel Lo Nigro <span dir="ltr"><<a href="mailto:lists@dan.cx" target="_blank">lists@dan.cx</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I'm curious as to if anyone has experienced this issue before. Given the following routes:</div>
<div><br></div><div><div><div><font face="courier new, monospace">// Blog home page - Don't include page number in URL for first page</font></div>
<div><font face="courier new, monospace">routes.MapRoute(</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>name: "BlogHome",</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">     </span>url: "blog",</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>defaults: new { controller = "Blog", action = "Index", page = 1 }</font></div><div><font face="courier new, monospace">);</font></div>

<div><font face="courier new, monospace">routes.MapRoute(</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>name: "BlogHomePage",</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap"> </span>url: "blog/page-{page}",</font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">      </span>defaults: new { controller = "Blog", action = "Index" },</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">    </span>constraints: new { page = @"\d+" }</font></div>

<div><font face="courier new, monospace">);</font></div></div><div><br></div><div>And this <a href="http://ASP.NET" target="_blank">ASP.NET</a> MVC action:</div><div><font face="courier new, monospace">public ActionResult Index(int page = 1) { ... }</font><br>

</div><div><br></div><div>Microsoft .NET is smart enough to use the first route if you build a URL with page = 1 (something like <font face="courier new, monospace">Url.Action("Index", "Blog", new { page = 1 }</font>) in <a href="http://ASP.NET" target="_blank">ASP.NET</a> MVC) and the second route when the page number isn't 1. However, Mono is always using the second route, even when page = 1. In theory it should be matching the first rule as it's added first (and thus should have higher priority).</div>

<div><br></div><div>I've worked around this in my code by explicitly specifying which route to use:</div><div><br></div><div><div><font face="courier new, monospace">public static string BlogIndex(this UrlHelper urlHelper, int page = 1)</font></div>

<div><font face="courier new, monospace">{</font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">     </span>return page == 1 </font></div><div><font face="courier new, monospace"><span style="white-space:pre-wrap">               </span>? urlHelper.RouteUrl("BlogHome") </font></div>

<div><font face="courier new, monospace"><span style="white-space:pre-wrap">              </span>: urlHelper.RouteUrl("BlogHomePage", new { page = page });</font></div><div><font face="courier new, monospace">}</font></div>

</div></div><div><br></div>I have reported this as a bug (<a href="https://bugzilla.xamarin.com/show_bug.cgi?id=9116" target="_blank">https://bugzilla.xamarin.com/show_bug.cgi?id=9116</a>) but I'm curious as to if it's a known issue with Mono's URL routing implementation. <div>

<br></div><div>I was going to try the Microsoft .NET implementation with Mono but it looks like Microsoft's implementation is in the core System.Web assembly in .NET 4.0 (instead of being in a separate System.Web.Routing assembly)</div>

<div><br></div><div>Thanks,</div><div> - Daniel</div></div>
</blockquote></div><br></div>