【问题标题】:ASP.NET Core 1.1 Web API not working on Web ApplicationASP.NET Core 1.1 Web API 不适用于 Web 应用程序
【发布时间】:2017-06-02 15:29:15
【问题描述】:

我使用 Visual Studio 2017 Community 创建了一个 ASP.NET CORE 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 应用程序中添加一个 Web API,有人建议对 API 使用 AREA,这很好。所以我为所有 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/

然后我得到一个异常,说一些关于歧义的事情,因为两个方法匹配。它们都以 Get 开头,但路由指定 Get (和 Get 单独)作为默认值,所以我不明白为什么 GetSitemap 和 GetSiteName 匹配。

如果我删除 GetSiteName API 方法,则不会发生模棱两可的异常,但会显示一个带有 GetSitemap 结果的页面,这是错误的,因为默认操作是 Get 而不是 GetSitemap。

【问题讨论】:

    标签: asp.net-mvc api asp.net-web-api asp.net-mvc-routing


    【解决方案1】:

    方法名称与 api 路由无关。您当前有两个调用在同一路由上,这是默认的控制器路由:

    localhost:1234/api/Test/
    

    您可以通过将HttpGet 标记编辑为以下内容来定义方法的路由:

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

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2019-01-28
      • 2021-01-25
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多