c# - 在同一个 MVC 6 Controller 中组合 API Controller 调用和 Controller 调用

标签 c# asp.net-core asp.net-core-mvc

我刚刚开始使用 MVC 6,之前已经为 API 调用和标准 Controller 调用创建了单独的 Controller 。在 MVC 6 中,不再有 APIController 类,这些操作可以包含在您的 Controller 类中。

所以这里我有一个 TeamsController。我有一个返回 View 的操作:

[Route("Teams")] 
public ActionResult Teams()

And then I have actions to return data :

//GET : api/Teams
[Route("api/Teams")]
[HttpGet("GetAllTeams")]
public IEnumerable<Team> GetAllTeams()

//GET : api/Teams/5
[Route("api/Teams/{teamId:int}")]
[HttpGet("{teamId:int}", Name = "GetTeamById")]
public IActionResult GetTeamById(int teamId)

//GET : api/Teams/Chicago Bears
[Route("api/Teams/{teamName}")]
[HttpGet("{teamName}", Name = "GetTeamByName")]
public IActionResult GetTeamByName(string teamName)

//POST : api/Teams
[Route("api/Teams/{team}")]
[HttpPost("{team}", Name = "AddTeam")]
public void AddTeam([FromBody]Team item)

//PUT: api/Teams
[Route("api/Teams/{team}")]
[HttpPut("{team}", Name = "EditTeam")]
public void EditTeam([FromBody]Team item)

//DELETE : api/Teams/4
[Route("api/Teams/{teamId:int}")]
[HttpDelete("{teamId:int}", Name="DeleteTeam")]
public IActionResult DeleteTeam(int id)

我不确定我是否正确配置了这些,例如,当我用 Javascript 发帖时,调用 GET 而不是 POST,当我调用 Delete 方法时调用 GetByTeamId。

有人可以就如何最好地设置这些路线提出建议吗?

编辑:这是 Javascript 帖子:

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);
                        }
                    });

最佳答案

你快到了。

您的代码片段中的 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 请求

关于c# - 在同一个 MVC 6 Controller 中组合 API Controller 调用和 Controller 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32179052/

相关文章:

c# - CPU 高使用率和串口时间

c# - 如何在不移动矩形的情况下剪切矩形?

C# 是否有内置函数可以将格式化的字符串转换回数字?

c# - 如何在 ASP.NET Core 中获取 Active Directory 当前用户显示名称?

ASP.NET5 MVC6 部署在 Azure 上 - 此 Web 应用程序已成功创建

c# - 从托管 C++/CLI 线程调用静态 C# 方法

.net - IIS 在不关闭 IIS 网站的情况下发布 ASP.NET Core 应用程序

typescript - ASP.NET 5 项目中的 TypeScript 工具版本设置在哪里?

c# - 我可以使用 JWT 进行身份验证,但我的名称声明在 ASP.NET Core 应用程序中无法识别

ASP.NET Core - TagHelper、部分 View 和属性名称冲突