使用角度发布将两个参数传递给WEB API调用

Den*_*els 5 c# asp.net-mvc json asp.net-web-api angularjs

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

public async Task<HttpResponseMessage> SendPost(Application application)
Run Code Online (Sandbox Code Playgroud)

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

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

这可行。

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

控制器:

public async Task<HttpResponseMessage> SendPost(RentalApplication application,string test)
Run Code Online (Sandbox Code Playgroud)

Javascript:

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

Thi*_*PXP 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: {} });
Run Code Online (Sandbox Code Playgroud)

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

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

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


Den*_*els 2

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

控制器:

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

JavaScript:

        var data = {
            application : application,
            test : "sample value"
        };

        $http.post("/api/TessIntegration/SendPost",data).
        success(function (data, status, headers, config) {
Run Code Online (Sandbox Code Playgroud)

}