【问题标题】:Pass two parameters to WEB API call using angular post使用 Angular post 将两个参数传递给 WEB API 调用
【发布时间】:2015-09-23 05:17:29
【问题描述】:

我的 WEB API 控制器中有以下发布方法:

public async Task<HttpResponseMessage> SendPost(Application application)

我使用 angular.js $http.post 通过 javascript 调用它,并将应用程序参数作为 JSON 传递:

$http.post("/api/AController/SendPost", JSON.stringify(application)).
            success(function (data, status, headers, config) {
}

这行得通。

现在我想将第二个参数作为一个简单的字符串传递(我无法修改现有的应用程序 JSON 对象)。我尝试了网络上建议的几种不同方法,但它们似乎都不起作用。我需要能够做这样的事情:

控制器:

public async Task<HttpResponseMessage> SendPost(RentalApplication application,string test)

Javascript:

           $http.post("/api/TessIntegration/SendPost", {application:JSON.stringify(application),test:"Some value"}).
            success(function (data, status, headers, config) {
}

【问题讨论】:

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


    【解决方案1】:

    您无法从 WebAPI 的正文中获取多个对象。

    如果您传递两个复杂对象,解决方案是将它们包装到另一个复杂对象中。

    public async Task<HttpResponseMessage> SendPost(SuperComplex request)
    
    public class SuperComplex {
        public Application Application { get; set; }
        public AnotherObject Object { get; set; }
    }
    
    $http.post("/api/AController/SendPost", { application: application, Object: {} });
    

    现在,如果第二个参数是一个简单的对象(例如字符串),您可以改为通过 queryString 传递它。

    $http.post("/api/AController/SendPost?test=some+value", application );
    

    此外,您不必进行字符串化,Angular 会为您完成。

    【讨论】:

      【解决方案2】:

      使用Newtonsoft.Json.Linq.JObject找到了解决方案:

      控制器:

      public async Task<HttpResponseMessage> SendPost(JObject data)
      {
          RentalApplication application = data["application"].ToObject<RentalApplication>();
          string test = data["test"].ToObject<string>();
      }
      

      Javascript:

              var data = {
                  application : application,
                  test : "sample value"
              };
      
              $http.post("/api/TessIntegration/SendPost",data).
              success(function (data, status, headers, config) {
      

      }

      【讨论】:

        【解决方案3】:

        更新到@Denys 答案。不需要使用 JObject。只需在您的 javascript 中使用 JSON.stringify(data) 即可:

        JAVASCRIPT:

        var data = {
                application : application,
                test : "sample value"
            };
        
            $http.post("/api/TessIntegration/SendPost",data).
            success(function (JSON.stringify(data), status, headers, config) {
        

        C#

        将控制器端点的定义更改为:

        public async Task<HttpResponseMessage> SendPost(RentalApplication application, string test)
        {
            RentalApplication application = data["application"].ToObject<RentalApplication>();
            string test = data["test"].ToObject<string>();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-27
          • 2019-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多