asp.net 5 mvc 6 中的 MVC 和 WebApi 可以使用同一个控制器吗?
Can the same controller can be used for MVC and WebApi in asp.net 5 mvc 6?
在 MVC 6 中,MVC 和 WebApi 控制器似乎是相同的。
我有以下代码
[Route("api/[controller]")]
public class TeamController : Controller
{
public IActionResult Index()
{
return View();
}
static readonly List<Team> _items = new List<Team>()
{
new Team { Id = 1, Name = "First Team" }
};
// GET: api/values
[HttpGet]
public IEnumerable<Team> Get()
{
return _items;
}
}
我在 Views/Team 文件夹下有 Index.cshtml。
我能够在 localhost:port/api/team 中获得结果,但 localhost:port/Team/Index 返回 404 错误。
那么如何为 MVC 和 WebApi 使用相同的控制器?
您已将路由属性应用于 class
[Route("api/[controller]")]
public class TeamController : Controller
因此它将将该路由部分应用于该控制器中的所有内容。您最好在应用程序启动时定义自定义路由。
这是一篇介绍路由的很棒的文章,包括一个混合 MVC/API 控制器:
http://stephenwalther.com/archive/2015/02/07/asp-net-5-deep-dive-routing
我把代码改成这样(blog article linked below)
[Route("[controller]")]
public class TeamController : Controller
{
[HttpGet("Index")]
public IActionResult Index()
{
return View();
}
static readonly List<Team> _items = new List<Team>()
{
new Team { Id = 1, Name = "First Team" }
};
// GET: api/values
[HttpGet]
public IEnumerable<Team> Get()
{
return _items;
}
将 class 的 'Route' 属性更改为仅 [controller],然后将 HttpGet 添加到 returns 视图的 Index() 方法。
现在http://myComputer:52687/Team/Index returns the view and http://myComputer:52687/TeamreturnsJSON回复。
在 MVC 6 中,MVC 和 WebApi 控制器似乎是相同的。 我有以下代码
[Route("api/[controller]")]
public class TeamController : Controller
{
public IActionResult Index()
{
return View();
}
static readonly List<Team> _items = new List<Team>()
{
new Team { Id = 1, Name = "First Team" }
};
// GET: api/values
[HttpGet]
public IEnumerable<Team> Get()
{
return _items;
}
}
我在 Views/Team 文件夹下有 Index.cshtml。 我能够在 localhost:port/api/team 中获得结果,但 localhost:port/Team/Index 返回 404 错误。
那么如何为 MVC 和 WebApi 使用相同的控制器?
您已将路由属性应用于 class
[Route("api/[controller]")]
public class TeamController : Controller
因此它将将该路由部分应用于该控制器中的所有内容。您最好在应用程序启动时定义自定义路由。
这是一篇介绍路由的很棒的文章,包括一个混合 MVC/API 控制器: http://stephenwalther.com/archive/2015/02/07/asp-net-5-deep-dive-routing
我把代码改成这样(blog article linked below)
[Route("[controller]")]
public class TeamController : Controller
{
[HttpGet("Index")]
public IActionResult Index()
{
return View();
}
static readonly List<Team> _items = new List<Team>()
{
new Team { Id = 1, Name = "First Team" }
};
// GET: api/values
[HttpGet]
public IEnumerable<Team> Get()
{
return _items;
}
将 class 的 'Route' 属性更改为仅 [controller],然后将 HttpGet 添加到 returns 视图的 Index() 方法。
现在http://myComputer:52687/Team/Index returns the view and http://myComputer:52687/TeamreturnsJSON回复。