【问题标题】:ASP.Net WebAPI with Angularjs 404 not found找不到带有 Angularjs 404 的 ASP.Net WebAPI
【发布时间】:2015-10-23 14:21:19
【问题描述】:

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

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

我通过几乎完全复制模板作者的代码来启动并运行它并添加了一个额外的按钮。

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

代码

他完成任务的方式:

前端:

// 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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    并使用正确的语法从前面调用 url。 其他方法也一样。

    【讨论】:

    • 谢谢,但我的问题不仅仅是让它工作,我想了解它为什么不起作用。您能对此有所了解吗?
    • 我认为它不会在您的控制器方法签名和您从前面调用的路由之间进行匹配。这通常是由于方法参数命名或 $http.post 路由语法造成的,因此您应该尝试指定直接路由,并完全按照指定的方式调用它。
    • 好吧,你还是不明白,他的代码有效。我 90% 相同的代码不起作用。我在我的控制器名称、方法、URL 的路由或任何内容中都找不到错误。是的,当然是前后端匹配的问题,但我的问题仍然存在,是什么问题?
    【解决方案2】:

    经过几次尝试不同的方法..我被我的网址中的逗号殴打>.

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多