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