MVC6控制器的发布值为空

时间:2016-03-18 10:35:18

标签: c# asp.net angularjs asp.net-web-api

我将我的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"}

3 个答案:

答案 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; }
}