Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access RouteTable.Routes.MapHttpRoute?

I have a Web Forms app that I created a few months ago and I added a Web API controller. I tried to use the 'automatic' routing that I saw in a presentation recently, but all I got was a 404. Then I tried to add routing for the Web API controller in my Global.asax using MapHttpRoute, as I've seen in several tutorials. However, even after adding Imports System.Web.Http to the file, the project will not recognize RouteTable.Routes.MapHttpRoute() I have tried adding other namespaces and ensuring that I have all the necessary Nuget packages, but I still am unable to set up routing for the Web API controller. Does anyone have a recommendation of where to start?

like image 262
Michael Richardson Avatar asked Sep 03 '13 03:09

Michael Richardson


3 Answers

If anyone has this same issue in C# read on.

I am also using a web forms app and set the routing through the Global.asax file. For me Intellisense was 100% correct and it would not build regardless. To get this to work I had to add the following using directives.

using System.Web.Http;

and

using System.Web.Routing;

Becareful not to use using System.Web.Http.Routing by accident. This wont work.

like image 145
spryce Avatar answered Oct 17 '22 01:10

spryce


You should add the reference to System.Web.Http.WebHost assembly and make sure you have

using System.Web.Http;

Why ? MapHttpRoute is defined in two assemblies, in System.Web.Http:

public static System.Web.Http.Routing.IHttpRoute MapHttpRoute(
    this System.Web.Http.HttpRouteCollection routes, string name, string routeTemplate)

Member of System.Web.Http.HttpRouteCollectionExtensions

and in System.Web.Http.WebHost

public static Route MapHttpRoute(
    this RouteCollection routes, string name, string routeTemplate, object defaults);

First one is an Extension on HttpRouteCollection

Second one is an Extension on RouteCollection

So when you have a webforms app, your Routes are defined in a RouteCollection so you need the WebHost version.

Its because architecture allowing WebApi to be hosted also out of IIS. see Hosting WebApi

like image 44
Martin Kunc Avatar answered Oct 17 '22 01:10

Martin Kunc


I found this thread, which indicates that IntelliSense apparently has a problem with this, but if you type something like the following, it will build and run:

RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}")
like image 9
woz Avatar answered Oct 17 '22 02:10

woz