C# 找不到Angularjs 404的ASP.Net WebAPI
我使用此[模板](“鼠标悬停时显示此文本”)创建了此项目 它是一个简单的任务管理器,您可以在其中创建、完成和删除任务 我几乎完全复制了模板作者的代码,让它运行起来,并添加了一个额外的按钮 下面的代码是他的方法和我的方法的一个示例 代码 他完成任务的方式: 前端:C# 找不到Angularjs 404的ASP.Net WebAPI,c#,asp.net,angularjs,asp.net-web-api,C#,Asp.net,Angularjs,Asp.net Web Api,我使用此[模板](“鼠标悬停时显示此文本”)创建了此项目 它是一个简单的任务管理器,您可以在其中创建、完成和删除任务 我几乎完全复制了模板作者的代码,让它运行起来,并添加了一个额外的按钮 下面的代码是他的方法和我的方法的一个示例 代码 他完成任务的方式: 前端: // called by ng-click="complete($index)" $scope.complete = function(index) { $http.post('/api/WS_Todo/Comp
// called by ng-click="complete($index)"
$scope.complete = function(index)
{
$http.post('/api/WS_Todo/CompleteTodoItem/' + $scope.todoList[index].id)
.success(function (data, status, headers, config) {
$scope.getList();
});
}
// called by ng-click="reopen($index)"
$scope.reopen = function(index)
{
$http.post('/api/WS_Todo/ReopenTodoItem', +$scope.todoList[index].id)
.success(function (data, status, headers, config) {
$scope.getList();
});
}
后端:
[HttpPost]
[Authorize]
async public Task<HttpResponseMessage> CompleteTodoItem(int id)
{
var item = db.todos.Where(t => t.id == id).FirstOrDefault();
if (item != null)
{
item.completed = true;
await db.SaveChangesAsync();
}
return Request.CreateResponse(HttpStatusCode.Accepted);
}
[HttpPost]
[Authorize]
async public Task<HttpResponseMessage> ReopenTodoItem(int id)
{
var item = db.todos.Where(t => t.id == id).FirstOrDefault();
if (item != null)
{
item.completed = false;
await db.SaveChangesAsync();
}
return Request.CreateResponse(HttpStatusCode.Accepted);
}
后端:
[HttpPost]
[Authorize]
async public Task<HttpResponseMessage> CompleteTodoItem(int id)
{
var item = db.todos.Where(t => t.id == id).FirstOrDefault();
if (item != null)
{
item.completed = true;
await db.SaveChangesAsync();
}
return Request.CreateResponse(HttpStatusCode.Accepted);
}
[HttpPost]
[Authorize]
async public Task<HttpResponseMessage> ReopenTodoItem(int id)
{
var item = db.todos.Where(t => t.id == id).FirstOrDefault();
if (item != null)
{
item.completed = false;
await db.SaveChangesAsync();
}
return Request.CreateResponse(HttpStatusCode.Accepted);
}
[HttpPost]
[授权]
异步公共任务重新打开ToDoItem(int id)
{
var item=db.todos.Where(t=>t.id==id).FirstOrDefault();
如果(项!=null)
{
item.completed=假;
等待db.saveChangesSync();
}
返回请求.CreateResponse(HttpStatusCode.Accepted);
}
问题
他的代码按预期工作
我的代码告诉我:
邮政404(未找到)angularjs:9734
而且,当两种方法都位于同一个前端和后端控制器中时,我看不出路由应该如何成为问题。如果我是你,我会在我的webApi方法上指定路由属性:
[Route("/api/WS_Todo/CompleteTodoItem/{id}")]
并使用正确的语法从前面调用url。
其他方法也一样。如果我是你,我会在我的webApi方法上指定路由属性:
[Route("/api/WS_Todo/CompleteTodoItem/{id}")]
并使用正确的语法从前面调用url。
其他方法也一样。经过几次尝试后,采用了不同的方法。。我在url>中被一个逗号打败了,在尝试了几次不同的方法后。。我在我的url>中被一个逗号打败了。谢谢,但我的问题不仅仅是让它工作,我想了解它为什么不工作。你能解释一下吗?我假设你的控制器方法签名和你从前面调用的路由不匹配。这通常是由于方法参数命名或$http.post路由语法造成的,因此您应该尝试指定一个直接路由,并完全按照指定的方式调用它。我90%相同的代码不起作用。我在我的控制器名称、方法、URL路由或任何内容中都找不到错误。是的,当然这是前端和后端之间的匹配问题,但我的问题仍然是,问题是什么?谢谢,但我的问题不仅仅是让它工作,我希望理解为什么它不工作。你能解释一下吗?我假设你的控制器方法签名和你从前面调用的路由不匹配。这通常是由于方法参数命名或$http.post路由语法造成的,因此您应该尝试指定一个直接路由,并完全按照指定的方式调用它。我90%相同的代码不起作用。我在我的控制器名称、方法、URL路由或任何内容中都找不到错误。是的,当然这是前端和后端之间的匹配问题,但我的问题仍然是,问题是什么?