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

本文关键字:参数 两个 WEB 调用 API post angular 使用 | 更新日期: 2023-09-27 18:13:58

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

public async Task<HttpResponseMessage> SendPost(Application application)

我通过javascript使用angular.js $http.post调用它,并通过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) {
}

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

WebAPI中不能从body中获取多个对象。

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

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会帮你完成。

使用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) {

}

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