我将我的Web应用程序从MVC5移植到MVC6。这个函数曾经在MVC5中运行良好,但在MVC6中没有。
我通过AngularJS将数据发布到此WebAPI方法,但搜索参数始终为null。我尝试用[FromBody]
和[FromHeader]
进行装饰,但似乎都没有效果。控制器被命中,值只是null,出了什么问题?
[HttpPost("AdvancedSearch")]
public List<MatchResult> AdvancedSearch(string searchParameter)
{
var searchResults = service.GetResults(searchParameter);
return searchResults;
}
我的AngularJS调用看起来像这样
myAPI.advancedSearch = function (searchParameter) {
var url = '/api/advancedsearch/';
// Request data
return $http({
method: 'POST',
data: { searchParameter: searchParameter },
url: url
});
}
我验证了数据已发送,在Chrome网络工具栏中发送了“请求有效负载”#34;是正确的
{searchParameter: "n1"}
答案 0 :(得分:2)
我找到了一种不使用模型或查询字符串的方法。 This answer explains但基本上你可以使用
[HttpPost]
public System.Net.Http.HttpResponseMessage Post([FromBody]dynamic value)
{
//...
}
然后 value
将包含您的所有发布数据。
修改强>
如需进一步阅读,请see this post,包括所有约束情况的表格,以及它何时会发生和不起作用!
答案 1 :(得分:1)
如果您认为某个对象过度使用,则可以始终使用查询字符串。我知道,看起来“老了”,但我猜它仍在工作。
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;
}
答案 2 :(得分:0)
你应该在行动中将字符串装入对象,因为你从AngularJS发送对象
public class SearchParamaterViewModel
{
public string searchParameter { get; set; }
}