可以在asp.net 5 mvc 6中将相同的控制器用于MVC和WebApi吗?

时间:2015-07-27 18:05:46

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

在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使用相同的控制器?

2 个答案:

答案 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响应。