使用angular post将两个参数传递给WEB API调用

时间:2015-09-23 05:17:30

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

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

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) {
}

3 个答案:

答案 0 :(得分:5)

您无法在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 );

此外,您不必进行stringify,Angular会为您做。

答案 1 :(得分: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) {

}

答案 2 :(得分:0)

更新为@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>();
}