.NET Core和MVC项目,api控制器路由不起作用

时间:2018-02-17 00:11:31

标签: .net asp.net-core asp.net-mvc-routing

在我添加新控制器时使用VS 2017创建的项目(包括MVC和Web API)中,默认路由将Index()函数调用到该新API控制器,但浏览到任何其他方法失败。

API代码

/products/{resource}/

Startup类的代码如下:

namespace TestApi.Controllers
{
[Produces("application/json")]
[Route("api/TestAPI")]
public class TestAPIController : Controller
{
    public string Index()
    {
        //if (!_signInManager.IsSignedIn(User))
        //return RedirectToAction("Login", "Account");

        return "View()";
    }

    //[Route("GetTestData")]
    [HttpGet]
    private string GetTestData()
    {
        return "Data";
    }
}
}

所以浏览到“https://localhost:44314/api/TestAPI”有效,但当我尝试浏览“https://localhost:44314/api/TestAPI/GetTestData”时,我发现找不到页面错误。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

使用此:

[Route("api/[controller]/[action]")]
public class TestAPIController : Controller
{

}

然后您可以浏览所有操作。

但可能想要更改操作名称,因此您应该像这样编码:

[Route("api/[controller]/[action]")]
public class TestAPIController : Controller
{
    [ActionName("start-here")]
    public JsonResult Start()
    {
        return Json();
    }
}

并且您可以使用具有以下参数的操作获得特定路径:

[Route("api/[controller]/[action]")]
public class TestAPIController : Controller
{
    [ActionName("start-here")]
    public JsonResult Start()
    {
        return Json();
    }

    [route("api/[controller]/nearby-businesses/{locationType}")]
    public JsonResult nearby_businesses(string locationType)
    {
        return Json();
    }
}

答案 1 :(得分:0)

可能是您的GetTestData操作方法是私有的。尝试公开。