2017-06-02 168 views
0

我使用Visual Studio 2017社區創建了ASP.NET CORE Web應用程序。在它上面我有通常的控制器(管理,家庭,帳戶)以及我自己的一些控制器。ASP.NET Core 1.1 Web API無法在Web應用程序上工作

我的API的TestController迄今只有兩個方法:

[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"); 
} 

現在,我想也是一個Web API添加到我的web應用程序,有人建議使用這是蠻好的API的區域。所以我爲所有API控制器創建了一個名爲API的區域。

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

而且在Startup.cs我的路線定義是這樣的:

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方法的請求,我得到一個空白頁:

 localhost:1234/api/Test/GetSitemap 

和我所看到的斷點不會在GetSitemap API方法上觸發。 但是,當我更改請求:

 localhost:1234/api/Test/ 

然後我得到一個異常說一些關於匹配ambitguous因爲兩種方法。它們都以Get開頭,但指定Get(和Get單獨)作爲默認路由,所以我不明白爲什麼GetSitemap和GetSiteName匹配。

如果我刪除了GetSiteName API方法,那麼模糊異常不會發生,但是我顯示了一個帶有GetSitemap結果的頁面,這是錯誤的,因爲默認操作是Get而不是GetSitemap。

回答

0

方法名稱與api路由無關。您目前擁有兩個電話是相同的路線,這是默認的控制器路線:

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

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

localhost:1234/api/Test/ 

您可以通過編輯HttpGet標籤下面定義的方法途徑

相關問題