在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使用相同的控制器?
答案 0 :(得分:3)
您已将路线属性应用于班级
[Route("api/[controller]")]
public class TeamController : Controller
所以它会将该路由部分应用于该控制器中的所有内容。你可能最好在app启动时定义自定义路线。
这是一篇很棒的文章,涉及路由,包括一个混合的MVC / API控制器: http://stephenwalther.com/archive/2015/02/07/asp-net-5-deep-dive-routing
答案 1 :(得分:1)
我改变了这样的代码(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;
}
将类的“Route”属性更改为[controller],然后将HttpGet添加到返回视图的Index()方法中。
现在http://myComputer:52687/Team/Index返回视图,http://myComputer:52687/Team返回JSON响应。