未找到Angularjs 404的ASP.Net WebAPI

时间:2015-10-23 14:21:19

标签: c# asp.net angularjs asp.net-web-api

我使用此[模板](https://visualstudiogallery.msdn.microsoft.com/48d928e3-9b5c-4faf-b46f-d6baa7d9886c"当您将鼠标悬停在")时显示此项目。

这是一个简单的任务管理器,您可以在其中创建,完成和删除任务。

我完成了并运行并添加了一个额外的按钮,几乎完全复制了模板作者的代码。

我下面的代码是他的方法和我的方法的一个例子。

CODE

他完成任务的方式:

前端:

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

后端:

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

我重新开启任务的方法:

前端:

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

问题

他的代码按预期工作。

我的代码告诉我:

POST http://localhost:33651/api/WS_Todo/ReopenTodoItem 404(未找到)angularjs:9734

当两种方法都在同一个前端和后端控制器中时,我无法看到路由应该是一个问题。

2 个答案:

答案 0 :(得分:0)

如果我是你,我会在我的webApi方法上指定一个路由属性:

[Route("/api/WS_Todo/CompleteTodoItem/{id}")]

使用正确的语法从前面调用url。 与其他方法相同。

答案 1 :(得分:0)

经过几次尝试不同的方法..我被我的网址中的逗号&gt;打败了。&lt;