web-dev-qa-db-ja.com

他のプロジェクトのWebApiコントローラー、ルート属性が機能しない

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 / がここでの答えです。

何か案は?

16
user1613512

これを試して。次のようなクラスをクラスライブラリプロジェクトに作成します。

_public static class MyApiConfig {


  public static void Register(HttpConfiguration config) {
      config.MapHttpAttributeRoutes();
  }
}
_

そして、現在config.MapHttpAttributeRoutes()を呼び出しているところはどこでも、代わりにMyApiConfig.Register(config)を呼び出します。

14
Darrel Miller

私たちは同様の問題を解決しようとしていました。外部アセンブリ内のルートが正しく登録されていませんでした。このページに示されているソリューションを試したときに、もう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 }
        );
1
DavB.cs