我刚开始使用MVC 6,之前已经为API调用和标准控制器调用创建了单独的控制器。在MVC 6中,不再有APIController类,这些操作可以包含在Controller类中。
所以这里我有一个TeamsController。我有一个动作来返回视图:
var tAdd = new team(self.Id(), self.TeamName(), self.Logo());
var dataObjectAdd = ko.toJSON(tAdd);
$.ajax({
url: 'http://lovelyjubblymvc6.azurewebsites.net/api/Teams',
type: 'post',
data: dataObjectAdd,
contentType: 'application/json',
success: function (data) {
self.teams.push(new team(data.TeamId, data.TeamName, data.Logo));
self.TeamName('');
self.Logo('');
},
error: function (err) {
console.log(err);
}
});
我不确定我是否正确配置了这些,例如当我在Javascript中发帖时,调用GET而不是POST,当我调用Delete方法而不是调用GetByTeamId时。
有人可以就如何最好地设置这些路线提出建议吗?
编辑:这是Javascript帖子:
{{1}}
答案 0 :(得分:1)
你快到了。
您的代码段中的AddTeam()
方法需要GET请求,因此可能解释了为什么您提到的POST无法正常工作。但是您希望这种方法能够响应POST请求而不是GET请求,因为它会改变数据。 GET请求通常使用URL查询参数完成,以这种方式更改数据有点危险。方法签名应该是:
[Route("api/Teams/{team}")]
[HttpGet("{team}", Name = "AddTeam")]
public void AddTeam([FromBody]Team item)
如果您想分别拨打EditTeam()
或DeleteTeam()
您必须发送PUT或DELETE请求,请不要忘记
答案 1 :(得分:0)
您的控制器属性中存在一些错误。
[Route("Teams")]
public ActionResult Teams()
And then I have actions to return data :
//GET : api/Teams
[HttpGet("api/Teams")]
public IEnumerable<Team> GetAllTeams()
//GET : api/Teams/5
[HttpGet("api/Teams/{teamId:int}")]
public IActionResult GetTeamById(int teamId)
//GET : api/Teams/Chicago Bears
[HttpGet("api/Teams/{teamName}")]
public IActionResult GetTeamByName(string teamName)
//POST : api/Teams
[HttpPost("api/Teams/{team}")]
public void AddTeam([FromBody]Team item)
//PUT: api/Teams
[HttpPut("api/Teams/{team}")]
public void EditTeam([FromBody]Team item)
//DELETE : api/Teams/4
[HttpDelete("api/Teams/{teamId:int}")]
public IActionResult DeleteTeam(int id)
无需指定动词和路线。动词过载使用该路线。我不确定您的POST javascript,但如果您要发帖请求,必须转到[HttpPost]
方法。