如何访问RouteTable.Routes.MapHttpRoute?

Mic*_*son 10 vb.net webforms asp.net-mvc-routing asp.net-web-api

我有几个月前创建的Web窗体应用程序,并添加了一个Web API控制器.我尝试使用最近在演示文稿中看到的"自动"路由,但我得到的只是404.然后我尝试使用MapHttpRoute为我的Global.asax中的Web API控制器添加路由,正如我在几个教程.但是,即使添加Imports System.Web.Http到文件后,项目也无法识别RouteTable.Routes.MapHttpRoute()我已尝试添加其他命名空间并确保我拥有所有必需的Nuget包,但我仍然无法为Web API控制器设置路由.有没有人建议从哪里开始?

spr*_*yce 15

如果有人在C#中有同样的问题,请继续阅读.

我还使用Web表单应用程序并通过该Global.asax文件设置路由.对我来说,Intellisense 100%正确无论如何都无法构建.为了使这个工作,我不得不添加以下使用指令.

using System.Web.Http;
Run Code Online (Sandbox Code Playgroud)

using System.Web.Routing;
Run Code Online (Sandbox Code Playgroud)

Becareful 使用using System.Web.Http.Routing偶然.这不行.


Mar*_*unc 11

您应该添加对System.Web.Http.WebHost程序集的引用,并确保您有

using System.Web.Http;
Run Code Online (Sandbox Code Playgroud)

为什么?MapHttpRoute在两个程序集中定义,位于System.Web.Http:

public static System.Web.Http.Routing.IHttpRoute MapHttpRoute(
    this System.Web.Http.HttpRouteCollection routes, string name, string routeTemplate)
Run Code Online (Sandbox Code Playgroud)

成员 System.Web.Http.HttpRouteCollectionExtensions

并在 System.Web.Http.WebHost

public static Route MapHttpRoute(
    this RouteCollection routes, string name, string routeTemplate, object defaults);
Run Code Online (Sandbox Code Playgroud)

第一个是HttpRouteCollection的扩展

第二个是RouteCollection的扩展

因此,当您拥有一个webforms应用程序时,您的路由被定义为一个RouteCollection所需的WebHost版本.

它的结构允许WebApi也可以在IIS之外托管.请参阅主机WebApi


woz*_*woz 9

我找到了这个线程,这表明IntelliSense显然有这个问题,但如果你输入类似下面的内容,它将构建并运行:

RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}")
Run Code Online (Sandbox Code Playgroud)