我在 Web 应用程序中使用 Microsoft ASP.NET Web API 2.2。
控制器如下所示:
public class EventsController: ApiController
{
[HttpGet]
[Route("GetAllActivities")]
public IEnumerable<IActivity> GetEvents()
{
/* stuff */
}
}
问题描述 我们试图在我们的项目中包含 RouteAttribute 类,但我们发现很难做到。有时,我们认为我们得到了它,但是当我们删除 bin 目录并尝试再次构建时,它不存在并且单词 Route 是红色的。另一个症状是缺少 GlobalConfiguration.Configure 和 HttpConfiguration.MapHttpAttributeRoutes。我们也无法理解擦除 bin 目录并从头开始构建的区别。甚至很难理解基于属性的路由还不是 WebAPI 2.2 的一部分,而是一个附加组件。如果我们做对了,一些包是强制性的,一些包是不允许的。真的吗?
这是我们尝试过的,没有特别的顺序:
- 安装包属性路由
- 安装包 AttributeRouting.WebApi
- 安装包 Microsoft.AspNet.WebApi.WebHost
- 更新包-重新安装 Microsoft.AspNet.WebApi.WebHost
- 更新包-重新安装
- 卸载包属性路由
我曾经让所有这些工作,然后一位同事在从我们的存储库中签出代码时找不到 RouteAttribute 类,而不是忽略单个文件。然后我删除了 bin 目录并重建了我的版本,我回归到无法找到 RouteAttribute 类。
我们通过更新确保我们拥有相同版本的 Visual Studio,但问题仍然存在。
我知道 MVC 也具有路由属性,并且它们与 webapi 路由属性不同。我也知道 webapi 路由属性分为网络托管和自托管两种。我试图在我的参考列表中引用 Ssytem.Web.Http.WebHost,因为我们在 IIS 上托管它。
不幸的是,他们决定为所有这些应用程序保持类的名称相同。如果它们不同,就不会发生误解。
这是项目中的引用列表,来自 csproj 文件。
<Reference Include="AttributeRouting, Version=3.5.6.0, Culture=neutral, PublicKeyToken=c10f85d521a011a9, processorArchitecture=MSIL">
<HintPath>..\..\packages\AttributeRouting.Core.3.5.6\lib\net40\AttributeRouting.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AttributeRouting.Web, Version=3.5.6.0, Culture=neutral, PublicKeyToken=c10f85d521a011a9, processorArchitecture=MSIL">
<HintPath>..\..\packages\AttributeRouting.Core.Web.3.5.6\lib\net40\AttributeRouting.Web.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="AttributeRouting.Web.Http, Version=3.5.6.0, Culture=neutral, PublicKeyToken=c10f85d521a011a9, processorArchitecture=MSIL">
<HintPath>..\..\packages\AttributeRouting.Core.Http.3.5.6\lib\net40\AttributeRouting.Web.Http.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Core" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Web.Services" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="WebActivator, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\WebActivator.1.0.0.0\lib\WebActivator.dll</HintPath>
<Private>True</Private>
</Reference>