11

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

4

5 回答 5

17

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

我还在使用 Web 表单应用程序并通过Global.asax文件设置路由。对我来说,Intellisense 是 100% 正确的,无论如何它都不会构建。为了让它工作,我必须添加以下 using 指令。

using System.Web.Http;

using System.Web.Routing;

注意不要意外使用using System.Web.Http.Routing。这行不通。

于 2013-11-19T07:53:31.703 回答
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的扩展

因此,当您有一个 webforms 应用程序时,您的 Routes 是在 a 中定义的,RouteCollection因此您需要该WebHost版本。

这是因为架构允许 WebApi 也托管在 IIS 之外。请参阅托管 WebApi

于 2013-09-19T04:27:16.577 回答
9

我找到了这个线程,这表明 IntelliSense 显然对此有问题,但是如果您键入如下内容,它将构建并运行:

RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}")
于 2013-10-02T12:56:25.523 回答
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-形式

于 2013-09-03T05:42:30.390 回答
0

我有同样的情况,我通过创建 api 控制器解决了,当你添加 api 控制器时,VS 将加载所有必需的参考。

于 2019-12-06T21:10:23.933 回答