MVC中的IHttpActionResult没有从angular.js $ http.post方法触发

时间:2015-08-05 11:11:10

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

我有这样的angular.js代码:

(function (appAN) {
    'use strict';
    appAN.controller('InfoController', function ($scope, $http) {
        $scope.model = {
            firstname: "john",
            lastname: "doe",
            company: 'IBM',
        }
        $scope.addbtn = function () {
            var info = {
                firstname: $scope.model.firstname,
                lastname: $scope.model.lastname,
                company: $scope.model.company
            }
            var url = "Info/AddInfo";
            var data = JSON.stringify(info);
            $http.post(url, data).success(function (data) {
                alert(success);
            });
        }
    });
}(angular.module('testd',[])));

并在c#代码中这样:

namespace testdemo.Controllers
{
    public class InfoController : ApiController
    {
        [HttpPost]
        public IHttpActionResult AddInfo([FromBody]InfoClass info)
        {
            object o = new object();
            return Json(o);
        }
    }

    public class InfoClass
    {
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string company { get; set; }
    }
}

现在的问题是:我无法在我的c#方法中获取值,突破点也没有在'AddInfo'方法中命中。

  

无法加载资源:服务器响应状态为404   (未找到)http://localhost:63498/Info/AddInfo

我能够看到值,直到var data = JSON.stringify(info);

我的代码出了什么问题?

我的路由是这样的:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
             name: "DefaultApi",
             routeTemplate: "api/{controller}/{id}",
             defaults: new { id = RouteParameter.Optional }
         );
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}

3 个答案:

答案 0 :(得分:1)

您应该在App_Start / WebApiConfig.cs中注册ApiControllers的路由。像这样:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

    }
}

然后像这样使用网址:

var url = "/api/Info/AddInfo"; 

答案 1 :(得分:0)

从代码中删除JSON.stringify并直接在$ http.post中传递info对象。 Angular将为您进行字符串化:)

您需要为后端注释您的帖子处理程序。

在RouteConfig中添加帖子URL

答案 2 :(得分:0)

确保您在webapiconfig.cs中有以下代码段来调用webapi。

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

在" api / Info / AddInfo "

中提及api url,如下所示