C# 向MVC6控制器发布的值为空

C# 向MVC6控制器发布的值为空,c#,asp.net,angularjs,asp.net-web-api,C#,Asp.net,Angularjs,Asp.net Web Api,我正在将我的web应用程序从MVC5移植到MVC6。该函数在MVC5中正常工作,但在MVC6中不正常 我正在通过AngularJS向这个WebAPI方法发布数据,但是搜索参数总是空的。我试着用[FromBody]和[FromHeader]来装饰它,但两者似乎都不起作用。控制器被击中,值为空,怎么了 [HttpPost("AdvancedSearch")] public List<MatchResult> AdvancedSearch(string searchParameter) {

我正在将我的web应用程序从MVC5移植到MVC6。该函数在MVC5中正常工作,但在MVC6中不正常

我正在通过AngularJS向这个WebAPI方法发布数据,但是搜索参数总是空的。我试着用
[FromBody]
[FromHeader]
来装饰它,但两者似乎都不起作用。控制器被击中,值为空,怎么了

[HttpPost("AdvancedSearch")]
public List<MatchResult> AdvancedSearch(string searchParameter)
{
    var searchResults = service.GetResults(searchParameter);

    return searchResults;
}
我验证了数据已发送,在Chrome webtools中,“请求负载”是正确的

{searchParameter: "n1"}

您应该在操作中将字符串装箱到对象中,因为您从AngularJS发送对象

public class SearchParamaterViewModel
{
    public string searchParameter { get; set; }
}

如果您认为某个对象的杀伤力过大,则始终可以使用querystring。我知道,它看起来很“老”,但我想它还在工作

 myAPI.advancedSearch = function (searchParameter) {
    var url = '/api/advancedsearch?searchParameter=' + searchParameter ;

    // Request data
    return $http({
        method: 'POST',
        data: { },
        url: url
    });
 }

[HttpPost("AdvancedSearch")]
public List<MatchResult> AdvancedSearch([FromQuery]string searchParameter)
{
    var searchResults = service.GetResults(searchParameter);

    return searchResults;
}
myAPI.advancedSearch=函数(searchParameter){
var url='/api/advancedsearch?searchParameter='+searchParameter;
//请求数据
返回$http({
方法:“POST”,
数据:{},
url:url
});
}
[HttpPost(“AdvancedSearch”)]
公共列表高级搜索([FromQuery]字符串搜索参数)
{
var searchResults=service.GetResults(searchParameter);
返回搜索结果;
}

我找到了一种不使用模型或查询字符串的方法。但本质上你可以使用它

[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]dynamic value)
{
   //...
}
value
将包含您的所有帖子数据

编辑


为了进一步阅读,请包括一个所有绑定情况的表格,以及它将和将不起作用的时间

内容类型是否为
application/json
?是的,它是
application/json
,这很烦人,因为我希望它这么简单:)您是否尝试过
[FromUri]字符串搜索参数
?不,它似乎不存在于MVC6中,而且有效负载不在URI中?@Chris传递字符串化数据,如
json.stringify({searchParameter:searchParameter})
我知道这是可行的,因为我在其他地方使用过它来登录等。但是,为每一次交互创建一个模型似乎太过分了,特别是当我只是做一个简单的搜索时?@Chris我想这将取决于你的需要。如果以后你想让AdvancedSearch包含30个参数,querystring将不再适合你的需要,但这再一次取决于你对未来的计划future@Chris我想你每次都应该简单地输入。如果你有很多POCO被发送,我可以理解,但例如,我的一个签名是一个模型列表…通过这个标记,我必须创建一个新的模型来保存一个列表!这太疯狂了不?但我想使用
d在您的情况下,Dynamic是一个过度的功能。与创建只有一个或两个属性的模型相比,它的过度功能更少。ModelBinder不能像以前那样工作,这是一个遗憾。我想您必须在每个场景中都最好使用它的基础上逐个播放
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]dynamic value)
{
   //...
}