2017-06-02 16 views
0

Visual Studio 2017 Communityを使用してASP.NET CORE Webアプリケーションを作成しました。その上に私は通常のコントローラ(管理、ホーム、アカウント)と自分自身のいくつかを持っています。ASP.NET Core 1.1 Web APIがWebアプリケーションで動作しない

私のAPIのTestControllerは、これまでのところ唯一の2つのメソッドがあります。今、私も自分のWebアプリケーションへのWeb APIを追加したい

[HttpGet] 
public IActionResult GetSitemap() 
{ 
    Request.Headers.Clear(); 
    Request.Headers.Add("Accept", "text/xml"); 
    System.Xml.Linq.XDocument gsmXML = GoogleSitemap.AutoSeek(Domain); 
    return new ContentResult() 
     { 
      StatusCode = 200, 
      ContentType = "application/xml", 
      Content = gsmXML.ToString() 
     }; 
} 

[HttpGet] 
public IActionResult GetSiteName() 
{ 
    return new OkObjectResult("Test API"); 
} 

は、誰かがちゃんとあるAPIのための領域を使用することを提案しています。そこで、すべてのAPIコントローラ用のAPIという名前の領域を作成しました。

~/Areas/ 
     API/ 
      Controllers/ 
       TestController.cs 
      _ViewImports.cshtml 
      _ViewStart.cshtml 

そしてStartup.csの私のルート定義は次のようになります。

 localhost:1234/api/Test/GetSitemap 

app.UseMvc(routes => 
    routes.MapRoute(
       name: "areaRoute", 
       template: "{area:exists}/{controller=Dashboard}/{action=Index}/{id?}"); 
    routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

問題は、私は私のAPIメソッドに要求を行うとき、私は空のページを取得しています

、GetSitemap APIメソッドでブレークポイントが表示されません。 しかし、私はへの要求を変更するとき:

 localhost:1234/api/Test/ 

2つの方法が一致したため、その後、私はambitguousについて何かを言った例外を取得します。どちらもGetで始まりますが、Get(およびGet alone)をデフォルトとして指定したルートでは、なぜGetSitemapとGetSiteNameが一致するのかわかりません。

GetSiteName APIメソッドを削除すると、あいまいな例外は発生しませんが、GetSitemapの結果がデフォルトのアクションでGetとGetSitemapであるため、間違ったページが表示されます。

答えて

0

メソッド名はAPIルートとは関係ありません。

[HttpGet("GetSitemap")] 
public IActionResult GetSitemap() 
{ 
    ... 
} 

[HttpGet("GetSiteName")] 
public IActionResult GetSiteName() 
{ 
    ... 
} 
:あなたは以下をご HttpGetタグを編集することで、メソッドのルートを定義することができ

localhost:1234/api/Test/ 

:あなたは現在、デフォルトのコントローラのルートで同じルート、上の二つのコールを持っています

関連する問題