ASP.NET Core 1.1 Web API无法在Web应用程序上工作

问题描述:

我使用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。

方法名称与api路由无关。您目前拥有两个电话是相同的路线,这是默认的控制器路线:

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

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

localhost:1234/api/Test/ 

您可以通过编辑HttpGet标签下面定义的方法途径