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であるため、間違ったページが表示されます。