我有一个几个月前创建的 Web 表单应用程序,并添加了一个 Web API 控制器。我尝试使用最近在演示文稿中看到的“自动”路由,但我得到的只是 404。然后我尝试使用 MapHttpRoute 在 Global.asax 中为 Web API 控制器添加路由,正如我在几个教程。但是,即使添加Imports System.Web.Http
到文件后,项目也无法识别RouteTable.Routes.MapHttpRoute()
我已尝试添加其他命名空间并确保我拥有所有必要的 Nuget 包,但我仍然无法为 Web API 控制器设置路由。有人建议从哪里开始吗?
5 回答
如果有人在 C# 中遇到同样的问题,请继续阅读。
我还在使用 Web 表单应用程序并通过Global.asax
文件设置路由。对我来说,Intellisense 是 100% 正确的,无论如何它都不会构建。为了让它工作,我必须添加以下 using 指令。
using System.Web.Http;
和
using System.Web.Routing;
注意不要意外使用using System.Web.Http.Routing
。这行不通。
您应该添加对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的扩展
因此,当您有一个 webforms 应用程序时,您的 Routes 是在 a 中定义的,RouteCollection
因此您需要该WebHost
版本。
这是因为架构允许 WebApi 也托管在 IIS 之外。请参阅托管 WebApi
我找到了这个线程,这表明 IntelliSense 显然对此有问题,但是如果您键入如下内容,它将构建并运行:
RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}")
我刚刚创建了两个新的 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-形式
我有同样的情况,我通过创建 api 控制器解决了,当你添加 api 控制器时,VS 将加载所有必需的参考。