Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找不到Angularjs 404的ASP.Net WebAPI_C#_Asp.net_Angularjs_Asp.net Web Api - Fatal编程技术网

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路由或任何内容中都找不到错误。是的,当然这是前端和后端之间的匹配问题,但我的问题仍然是,问题是什么?