Web アプリケーションで Microsoft ASP.NET Web API 2.2 を使用しています。
コントローラーは次のようになります。
public class EventsController: ApiController
{
[HttpGet]
[Route("GetAllActivities")]
public IEnumerable<IActivity> GetEvents()
{
/* stuff */
}
}
問題 の説明 RouteAttribute クラスをプロジェクトに含めようとしていますが、そうするのが難しいことがわかりました。時々、それを取得したと思いますが、bin ディレクトリを削除して再度ビルドしようとすると、そこにはなく、Route という単語が赤く表示されます。もう 1 つの症状は、GlobalConfiguration.Configure と HttpConfiguration.MapHttpAttributeRoutes が失われることです。また、bin ディレクトリを消去してゼロからビルドすることの違いも理解できません。属性ベースのルーティングが WebAPI 2.2 の一部ではなく、アドオンであることを理解するのはさらに困難です。うまくいけば、一部のパッケージは必須であり、一部のパッケージはこれを機能させることが許可されていません。本当?
これは、特別な順序ではなく、私たちが試したことです。
- インストール パッケージの AttributeRouting
- インストール パッケージ AttributeRouting.WebApi
- インストール パッケージ Microsoft.AspNet.WebApi.WebHost
- 更新パッケージ - Microsoft.AspNet.WebApi.WebHost を再インストールします
- 更新パッケージ - 再インストール
- アンインストール パッケージの AttributeRouting
私はこれらすべてを一度に機能させましたが、同僚はリポジトリからコードをチェックアウトするときに RouteAttribute クラスを見つけることができず、単一のファイルを無視することはありませんでした。次に、bin ディレクトリを削除してバージョンを再構築したところ、RouteAttribute クラスが見つからないという状態に戻りました。
更新によって同じバージョンの Visual Studio を使用できるようにしましたが、問題は残っています。
MVC にもルート属性があり、それらが webapi ルート属性と同じではないことを認識しています。また、webapi ルート属性が Web ホスト型と自己ホスト型に分割されていることも認識しています。IIS でこれをホストしているため、参照リストに Ssytem.Web.Http.WebHost への参照を追加しようとしています。
残念ながら、彼らはすべてのアプリケーションで同じクラス名を維持するという決定を下しました。それらが異なっていれば、誤解は生じません。
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>