最初の製品リリース Asp.NET WebApi が導入され、人々がリリース候補版からそれにアップグレードしていたときに、他の多くの人が抱えていたように見える問題に遭遇しています...
私は、ウェブに投稿されたすべての解決策を試してみましたが、運が悪かったのですが、今では状況をよりよく理解しており、問題を絞り込んだと思います.
具体的には、私のアプリ (ローカル IIS サーバーにデプロイされているか、開発サーバーで実行されているか) が古い System.Web.Http アセンブリを使用しているようです。
Application_Start() メソッドの 2 行目は例外で失敗します。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
**WebApiConfig.Register(GlobalConfiguration.Configuration);**
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
テンプレートに含まれる WebApiConfig.cs ファイル/クラスから Register メソッドを呼び出します。
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
config.Routes.MapHttpRoute() を呼び出すと、次の例外が発生します。
Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.
Server stack trace:
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
Exception rethrown at [0]:
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Web.Http.GlobalConfiguration.get_Configuration()
at MvcApplication2.WebApiApplication.Application_Start()
in C:\Projects\TestArea\ASP_MVC\4\MvcApplication2\Global.asax.cs:line 21
これまでに行ったことは次のとおりです。
- .NET のすべてのバージョンを再インストールする
- System.Web.Http を GAC から削除する
- プロジェクト参照が、OS の .NET アセンブリではなく、WebApi ディレクトリを指していることを確認してください。
- プロジェクト参照が「ローカルにコピー」に設定されていることを確認しました
- c:\windows\system32\inetsrv\ および c:\inetpub から IIS の一時ファイルを削除しました。
- c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe を実行しました
- NuGet を介してすべての WebApi 関連パッケージを更新しました
- IIS とサイトの停止と開始
- 再起動しました
ServiceResolver メソッドは、通常の .NET System.Web.Http には存在せず、System.Web.Http の WebApi バージョンにのみ存在します。そのため、間違ったアセンブリを参照していると考えました。
他に何をすべきかわかりません。どんな助けでも大歓迎です。ありがとうございました。