Я использую 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, а является надстройкой. Если мы все правильно поняли, некоторые пакеты являются обязательными, а некоторые пакеты не могут заставить это работать. Это правда?
Это то, что мы пробовали, в произвольном порядке:
- Install-Package AttributeRouting
- Пакет установки AttributeRouting.WebApi
- Пакет установки Microsoft.AspNet.WebApi.WebHost
- Update-Package - переустановить Microsoft.AspNet.WebApi.WebHost
- Обновление-Пакет-переустановить
- Uninstall-Package AttributeRouting
У меня все это работало один раз, потом коллега не смог найти класс 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>
Install-package
, а некоторыеHintPath
содержатpackages
, так что да, он использует NuGet. - person venerik   schedule 10.03.2016