2つのプロジェクトで解決策があります。 1つのWebApiブートスタックプロジェクトともう1つはクラスライブラリです。
クラスライブラリには、属性ルーティングを備えたApiControllerが含まれています。 Web APIプロジェクトからクラスライブラリへの参照を追加し、これが正常に機能することを期待しています。
WebAPIのルーティングは次のように構成されています。
config.MapHttpAttributeRoutes();
コントローラはシンプルで、次のようになります。
public class AlertApiController:ApiController
{
[Route("alert")]
[HttpGet]
public HttpResponseMessage GetAlert()
{
return Request.CreateResponse<string>(HttpStatusCode.OK, "alert");
}
}
しかし、URL「/ alert」に移動すると404が返されます。
ここで何が欠けていますか?このコントローラーを使用できないのはなぜですか?アセンブリは間違いなくロードされているので、私は思いません http://www.strathweb.com/2012/06/using-controllers-from-an-external-Assembly-in-asp-net-web-api / がここでの答えです。
何か案は?
これを試して。次のようなクラスをクラスライブラリプロジェクトに作成します。
_public static class MyApiConfig {
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes();
}
}
_
そして、現在config.MapHttpAttributeRoutes()
を呼び出しているところはどこでも、代わりにMyApiConfig.Register(config)
を呼び出します。
私たちは同様の問題を解決しようとしていました。外部アセンブリ内のルートが正しく登録されていませんでした。このページに示されているソリューションを試したときに、もう1つの詳細が見つかりました。外部アセンブリ「MyApiConfig.Register」への呼び出しは、MapHttpRouteへの呼び出しの前に行う必要がありました
HttpConfiguration config = new HttpConfiguration();
MyExternalNamespace.MyApiConfig.Register(config); //This needs to be before the call to "config.Routes.MapHttpRoute(..."
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);