C# 如何使用angularJs将数组对象传递给web api方法

C# 如何使用angularJs将数组对象传递给web api方法,c#,angularjs,asp.net-web-api,C#,Angularjs,Asp.net Web Api,我正在创建一个客户端脚本,使用$http将字典对象类型发送到web api方法,如下所示: $scope.SearchPolicyDetails = function (data) { var searchPolicy = new Array(); searchPolicy["InsuredName"] = data.InsuredName; searchPolicy["PostalCode"] = data.PostalCode; searchPolic

我正在创建一个客户端脚本,使用
$http
将字典对象类型发送到web api方法,如下所示:

    $scope.SearchPolicyDetails = function (data) {
    var searchPolicy = new Array();
    searchPolicy["InsuredName"] = data.InsuredName;
    searchPolicy["PostalCode"] = data.PostalCode;
    searchPolicy["LOB"] = data.LOB;
    searchPolicy["AgencyName"] = data.AgencyName;
    searchPolicy["Symbol"] = data.Symbol;
    searchPolicy["PolicyNum"] = data.PolicyNum;
    searchPolicy["MCO"] = data.MCO;
    searchPolicy["expireswithin"] = data.expireswithin;
    searchPolicy["SortFields"] = data.SortFields;
    searchPolicy["SortOrder"] = data.SortOrder;

    $http({
        url: "http://localhost:53054/api/GetPoliciesBySearch",
        dataType: 'json',

        data: searchPolicy,
        headers: {
            "Content-Type": "application/json"
        }
    }).success(function (response) {
        $scope.value = response;
    })

};
我有这个
WebAPI
方法:

    public List<Dictionary<string,string>> GetPoliciesBySearch(Dictionary<string,string> policySearch)
    {

        return SpecializedHandler.GetAllPolicies(policySearch).IterativeResource;
    }
public List GetPoliciesBySearch(字典策略搜索)
{
返回SpecializedHandler.GetAllPolicys(policySearch).IterativeResource;
}
但是我没有收到这个方法的对象

我在chrome控制台中看到此错误:


您需要定义一个类并使用它,而不是在API操作中使用字典

class PolicyRequest 
{
     public string InsuredName { get; set; }
     public string PostalCode { get; set; }
     public string LOB { get; set; }
     ...
}
searchPolicy[“InsuredName”]=searchPolicy.InsuredName。这不是一个数组,而是一个json对象,具有InsuredName等属性。使其成为一个数组。你可以做: var searchPolicy=[];
searchPolicy.push(data.InsuredName) 首先:clientside创建的对象不会转换为
列表
,因此,要使其按我们所希望的那样工作,我们必须进行一些更改。考虑:

var searchPolicy = {};
searchPolicy['InsuredName'] = data.InsuredName;
searchPolicy['PostalCode'] = data.PostalCode;
//etc (see below for another crucial piece)    
第二:在
$http
中调用的代码没有针对任何特定的方法。考虑下面的一些事情:

$http({
    url: "http://localhost:53054/api/GetPoliciesBySearch",
    dataType: 'json',
    method: 'POST',
    data: JSON.stringify(searchPolicy),
    headers: {
        "Content-Type": "application/json"
    }
}).then(successHandler, errorHandler);

//try to avoid the deprecated success / error functions

function successHandler(response){
    $scope.value = response;
}

function errorHandler(response){
    //I strongly consider this for debugging
    console.log(response);
}

第三:考虑在WebAPI控制器中接受标准<代码>字典>代码,因为新对象不应该是字典列表,而是平板字典。()

最后:从错误消息来看,路由可能会混淆;确保WebApiConfig.cs中有类似于以下内容的路由设置:

RouteTable.Routes.MapHttpRoute("GetPoliciesBySearch",
    "api/getpoliciesbysearch",
    defaults: new 
    {
        controller = "{your controller name here}", 
        action = "GetPoliciesBySearch"
    });

我认为您的代码和UI在不同的项目中,可能是您没有在web.config或WebApiConfig.cs中配置CORS。你可以点击这个网址


浏览器开发工具网络中的请求状态是什么?为什么不直接将
数据传递到
$http
?同样缺少
方法
方法也可以。。但是,如何发送到具有dictionary对象@charlietflso的方法,您在浏览器开发工具网络中看到了什么?当
方法
丢失时,也看不出它是如何好用的。还有,你为什么不使用错误处理程序呢?我已经在我的帖子中修改并添加了pic@charlietfl@DotNetDeveloper. 这通电话是邮寄还是收件。基于命名约定,我假设您正在尝试获取?谢谢。它现在正在工作。添加->var cors=new EnableCorsAttribute(“,”,“*”);配置使能cors(cors);在WebApiConfig.cs中,并已解决。