2016-03-23 15 views
1

自己ホストWebAPIサーバを作成しようとしています。すべてのルートを1つのコントローラに移動したい。このコントローラーは、URLのコントローラー部分を取り出し、これを使用して適切な応答を決定することができます。WebApiハードコーディングコントローラルーティング

_configuration.Routes.MapHttpRoute 
(
    name: "DefaultApi", 
    routeTemplate: string.Concat("api/Home", "/{id}"), 
    defaults: new { id = RouteParameter.Optional, controllerName="Home" } 
); 

私のコントローラクラスは "にHomeController" と呼ばれている:

は、私は次のルート構成を有しています。私はそれにすべてのURLをリダイレクトしようとしています。

ここにHomeControllerのコードを示します。今のところ私は外部ロジック(リモートコントローラ)への呼び出しをコメントアウトしました。 Getアクションで文字列を返すだけです。

public class HomeController : ApiController 
{ 
    private IExternalController<string> remoteController; 

    public HomeController() 
    { 
     remoteController = GlobalKernelConfiguration.GetStandardKernel().Get<IExternalController<string>>(); 
    } 

    public string Get() 
    { 
     return "HELLO FROM INTERNAL"; //remoteController.Get(); 
    } 

    public string Get(int id) 
    { 
     return remoteController.Get(id); 
    } 

    public void Delete(int id) 
    { 
     remoteController.Delete(id); 
    } 

    public void Post(string value) 
    { 
     remoteController.Post(value); 
    } 

    public void Put(int id, string value) 
    { 
     remoteController.Put(id, value); 
    } 
} 

私は、ホームコントローラにルーティングするhttp://localhost:9000/api/[AnythingHere]を期待するだろうが、次のURLをしようとしたとき、私は次のエラーを取得する:http://localhost:9000/api/Home

{「メッセージ」: "いいえHTTPリソースが要求URIに一致することが判明しました'http://loca lhost:9000/API /ホーム' "" MessageDetail。 ":" コントローラ名を提供しませルートが なかったリクエストURI 'http://localhost:9000/api/Home' と一致することが分かっ "}

+0

だから、これはどうしますか? – CodeCaster

+0

@CodeCaster私はコンソールアプリケーションからヘッダー情報を印刷したところ、エラーが見つかりました。私はそれを質問に付けました。 –

+0

あなたの 'HomeController'は' ApiController'ですか? – CodeCaster

答えて

1

@CodeCasterはコメントで問題を示唆したようにによって引き起こされたルーティングオプションで正しいパラメータを使用していません。

これは、私はこれは私が今持っているものである

_configuration.Routes.MapHttpRoute ( name: "DefaultApi", routeTemplate: string.Concat("api/Home", "/{id}"), defaults: new { id = RouteParameter.Optional, controllerName="Home" } );

前に持っていたものです:デフォルトパラメータが変更されたという通知

 public static void AddControllerRoute(string controllerName) 
    { 
     _configuration.Routes.MapHttpRoute 
      (
       name: "DefaultApi", 
       routeTemplate: string.Concat("api/Home", "/{id}"), 
       defaults: new { id = RouteParameter.Optional, controller ="Home" } 
      ); 
    } 

、今の代わりにコントローラ名「の「コントローラ」を使用しています"これは問題を解決し、現在は機能しています。