2016-08-11 25 views
0

私の管理エリアに存在するWeb APIルートをテストしようとしています。エリアwebapiルートが解決されていません

これは、私がここでそうのようなルートプレフィックス[RoutePrefix( "管理者/ miscの")]

を持っているエリア内のルート定義

[HttpPut] 
    [Route("timezone/put/{timezone}", Name = "PutTimeZone")] 
    [AllowAnonymous] 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutTimeZone(string timezone) 
    { 
    /*Action body*/ 
    } 

である私のルートテストは

です
const string route = "/admins/misc/timezone/put/-120"; 
     RouteAssert.HasApiRoute(_httpConfiguration, route, HttpMethod.Put); 

     _httpConfiguration.ShouldMap(HttpMethod.Put, route) 
      .To<MiscApiController>(HttpMethod.Put, x => x.PutTimeZone("-120")); 

私は、テストを実行すると、私が手MvcRouteTester.Assertions.AssertionException : Expected 'Administration', got no value for 'area' at url '/admins/misc/timezone/put/-120'.

私はあなたがMVCエリアを使用している場合は、限り、あなたは名前空間の標準 レイアウトを使用すると、エリア名は、お使いの コントローラタイプ名から抽出された領域に対してテストされますroute tester wiki page

で読みますルートによって選択されます。例: コントローラの完全修飾タイプ名が MyWebApp.Areas.Blog.CommentControllerの場合、予想される領域名は となります。

しかし、率直に言って、私はテストをパスするために何をすべきかについて何の手がかりも与えません。私の質問は何が欠けているのですか?

答えて

1

[RoutePrefix("admins/misc")][RouteArea("Administration",AreaPrefix = "admins/misc")]に交換するか、または両方を[RouteArea("Administration",AreaPrefix = "admins"),RoutePrefix("misc")]と組み合わせてください。

編集: 私はMvcRouteTesterライブラリのソースをダウンロードして、あなたが提供され、ライブラリ自体に問題があるように見えるとほぼ同じ例を使用して、それをデバッグしようとしました。

細目:一つの方法は、Common.Verifier.VerifyExpectations予想領域expected.Area一致ルートの実領域actual.Areaはなく(それはApiRoute.Generator.ReadRequestPropertiesのコントローラとアクションプロパティを設定しないが)任意の値に実領域プロパティを設定する以前のコードが存在しないと主張しています。

私は現在の状態(この記事の時点で)では、WebApiの領域をサポートしていないと考えています。この投稿へのリンクを含むMvcRouteTester githubページの問題を開くことをお勧めします。

+0

しかし、ルート領域は特にAsp.net Mvcのためのものであり、Webapiの亜種ではないようですが、webapiコントローラ – Cizaphil

+0

で試してみましたが、テストはまだ同じ例外メッセージで失敗しています上記。 – Cizaphil

+0

私はそれを認識していないし、私は答えが何であるか分からない、申し訳ありません。これまでのところ、ApiControllerを使用してみたことはありませんでした。あなたのApiControllerの名前空間は何ですか?あなたが正しく提供したwikiドキュメントを理解していれば、予想される名前空間は 'YourProjectName.Areas.Administration'です。それを確認できますか? – davke

関連する問題