Cant get my routing to workhttp://forums.asp.net/t/1797644.aspx/1?Cant+get+my+routing+to+workFri, 27 Apr 2012 10:39:26 -040017976444954559http://forums.asp.net/p/1797644/4954559.aspx/1?Cant+get+my+routing+to+workCant get my routing to work <p>I am trying to get a hold of using RESTful on MVC 4 to give me an API I can use on WP/Android/Iphone, so for starters (This method will be remade later, this is just for testing purposes)</p> <p>I have a WP app that communicates with the server and sends it a json object and recieves a json object using restclient</p> <pre class="prettyprint">private void ButtonOptionTap(object sender, EventArgs e) { RestClient client = new RestClient(); client.BaseUrl = &quot;http://localhost:21688/API/Account/Login&quot;; RestRequest request = new RestRequest(); request.Method = Method.POST; request.RequestFormat = DataFormat.Json; User user = new User { UserName = &quot;muhcow&quot;, Password = &quot;123456&quot; }; request.AddBody(user); client.PostAsync&lt;LoginResult&gt;(request, (response, ds) =&gt; { LoginResult result = response.Data; System.Diagnostics.Debug.WriteLine(response.Content); }); }</pre> <p>And then I have my servercode which I first tried making a normal controller and then just making a controller called account and an action called login taking a httppost, and that worked fine, but from what I can read its not the way to do rest!</p> <p>So I tried making a controller inheriting from apicontroller but now I got issues even getting routed to the Post action in the LoginController</p> <p>So post is in Domain\API\Login\LoginController</p> <p>And the post action is like so</p> <pre class="default prettyprint"><pre class="prettyprint"><span class="pln">&nbsp; &nbsp; </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">Post</span><span class="pun">(</span><span class="typ">Login</span><span class="pln"> loginModel</span><span class="pun">)</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="typ">LoginResponse</span><span class="pln"> loginResponse </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">LoginResponse</span><span class="pun">();</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Membership</span><span class="pun">.</span><span class="typ">ValidateUser</span><span class="pun">(</span><span class="pln">loginModel</span><span class="pun">.</span><span class="typ">UserName</span><span class="pun">,</span><span class="pln"> loginModel</span><span class="pun">.</span><span class="typ">Password</span><span class="pun">))</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginResponse</span><span class="pun">.</span><span class="typ">Success</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginResponse</span><span class="pun">.</span><span class="typ">Token</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"11111111111111111"</span><span class="pun">;</span><span class="pln"><br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">Json</span><span class="pun">.</span><span class="typ">Encode</span><span class="pun">(</span><span class="pln">loginResponse</span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br /><br />&nbsp; &nbsp; &nbsp; &nbsp; loginResponse</span><span class="pun">.</span><span class="typ">Success</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; loginResponse</span><span class="pun">.</span><span class="typ">Error</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">Json</span><span class="pun">.</span><span class="typ">Encode</span><span class="pun">(</span><span class="pln">loginResponse</span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br /></span></pre></pre> <p>but with the current code that is not hit (Checking with breakpoints)</p> <p>I havent changed the MapRoute yet so its just</p> <pre class="default prettyprint"><pre class="prettyprint"><span class="pln">&nbsp; &nbsp; </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">override</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">RegisterArea</span><span class="pun">(</span><span class="typ">AreaRegistrationContext</span><span class="pln"> context</span><span class="pun">)</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; context</span><span class="pun">.</span><span class="typ">MapRoute</span><span class="pun">(</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="str">"API_default"</span><span class="pun">,</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="str">"API/{controller}/{action}/{id}"</span><span class="pun">,</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">new</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> action </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Index"</span><span class="pun">,</span><span class="pln"> id </span><span class="pun">=</span><span class="pln"> </span><span class="typ">UrlParameter</span><span class="pun">.</span><span class="typ">Optional</span><span class="pln"> </span><span class="pun">}</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span></pre></pre> 2012-04-27T09:40:31-04:004954633http://forums.asp.net/p/1797644/4954633.aspx/1?Re+Cant+get+my+routing+to+workRe: Cant get my routing to work <p>You need to use MapHttpRoute not MapRoute for WebApi to work:</p> <p><span face="monospace" style="font-family:monospace"></span></p> <pre class="prettyprint">routes.MapHttpRoute(&quot;Default API Route&quot;, &quot;api/1.0/{controller}/{id}&quot;, new { id = RouteParameter.Optional });</pre> <p><span face="monospace" style="font-family:monospace"><br> <br> </span></p> 2012-04-27T10:16:17-04:004954679http://forums.asp.net/p/1797644/4954679.aspx/1?Re+Cant+get+my+routing+to+workRe: Cant get my routing to work <p>So my APIAreaRegistration needs to changed?</p> <pre class="prettyprint">using System.Web.Mvc; namespace WebSite.Areas.API { public class APIAreaRegistration : AreaRegistration { public override string AreaName { get { return &quot;API&quot;; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapHttpRoute( &quot;API_default&quot;, &quot;API/{controller}/{action}/{id}&quot;, new { action = &quot;Index&quot;, id = UrlParameter.Optional } ); } } }</pre> <p><br /><br /></p> <p>to something like this?</p> <pre class="prettyprint">public static void RegisterRoutes(RouteCollection routes) { var Route1 = routes.MapHttpRoute ( name: "ClientApi", routeTemplate: "client/{controller}/{param1}" ); Route1.DataTokens["Namespaces"] = new string[] {"Client"}; var Route2 = routes.MapHttpRoute ( name: "OrderApi", routeTemplate: "order/{controller}/{param1}" ); Route2.DataTokens["Namespaces"] = new string[] { "Order" }; }</pre> <p><br> If yes, how do I do that for areas or should I change the Global.asax?</p> 2012-04-27T10:39:26-04:00