如何访问RouteTable.Routes.MapHttpRoute?

时间:2013-09-03 03:50:33

标签: vb.net webforms asp.net-web-api asp.net-mvc-routing

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

5 个答案:

答案 0 :(得分:15)

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

我也在使用网络表单应用,并通过Global.asax文件设置路由。对我来说,Intellisense 100%正确无论如何都无法构建。为了实现这一点,我必须使用指令添加以下内容。

using System.Web.Http;

using System.Web.Routing;

奇怪意外使用using System.Web.Http.Routing。这不行。

答案 1 :(得分:11)

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

using System.Web.Http;

为什么? MapHttpRoute System.Web.Http中的两个程序集中定义:

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

System.Web.Http.HttpRouteCollectionExtensions

的成员

并在System.Web.Http.WebHost

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

第一个是 HttpRouteCollection

的扩展

第二个是 RouteCollection

的扩展

因此,当您拥有一个网络表单应用时,您的路由会在RouteCollection中定义,因此您需要WebHost版本。

这是因为允许WebApi托管的架构也来自IIS。见Hosting WebApi

答案 2 :(得分:9)

我找到了this thread,这表明IntelliSense显然存在问题,但如果您键入以下内容,它将构建并运行:

RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}")

答案 3 :(得分:1)

我刚刚创建了两个新的webforms应用程序(一个使用.NET 4,另一个使用4.5),除了通过nuget添加web api之外什么也没做,并且它有效。

您的应用运行的是哪个版本的ASP.NET?如果您正在运行ASP.NET WebForms 2.0 / 3.5,则不支持它。

这是一个教程,演示如何将Web API添加到Web窗体应用程序 - http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms

答案 4 :(得分:0)

我也有同样的情况,当您添加 api控制器VS将加载所有必需的参考。