在asp.net mvc6中获取有角度的ajax数据

时间:2016-06-02 08:29:21

标签: c# asp.net angularjs ajax asp.net-core-mvc

我一直试图解决这个问题几个小时,但没有一个解决方案似乎有所帮助。我有一个AngularJs的MVC6项目。我能够连接,所以我的路由正在工作,如果我对字符串或其他东西进行硬编码,我能够获取数据,但我似乎无法访问发送到服务器的数据。

我的angularjs http请求代码:

var app = angular.module('APIService', []);
app.factory('APIService', function ($http) {
    var api = {};

    api.getBuyer = function (data) {
        return $http.post('/api/buyer', data);
    }

    return api;
});

angularjs函数调用

APIService.getBuyer({ Url: 'samirbashir5739', FirstName: 'Samir' }).success(function (res) {

});

我的C#控制器

namespace Reporting.api
{
    [Route("api/buyer")]
    public class BuyersController : Controller
    {
        // POST api/buyer
        [HttpPost]
        public string Post([FromBody] string Url)
        {
            return Url;
        }
    }
}

我已尝试将数据设置为" JsonResult数据",甚至"字符串网址。"我找到的大多数教程都有一个数据对象,所以它适合像" [FromBody]买家买家"但是我没有它的对象,我只想要数据。有可能吗?

2 个答案:

答案 0 :(得分:1)

我认为你的控制器错了。您正在尝试传递Url和名称,而您的控制器方法正在等待单个Url。 尝试只传递一个Url,它应该工作。 如果要传递Url和Firstname,则必须修改控制器方法,如下所示:

[HttpPost]
    public string Post([FromBody] string Url, string FirstName)
    {
        // Do whatever you need to do here ...
    }

答案 1 :(得分:1)

WebApi不支持来自帖子请求的多个参数绑定。您可以查看更多详情here

因此,WebApi的正确方法是创建一个包含将被绑定的所有属性的请求模型。也许你可以尝试多个[FromUri]参数,但是你必须自己在angualr中将它们添加到url中,而不是只传递给.post。

示例模型:

public class RequestModel
{
    public string Url {get;set;}
    public string Name {get;set;}
}

我还相信,添加模型可以改善代码的结构,因为您始终知道服务器的期望,而不是使用某些动态数据。

P.S。没有注意到你使用的是ASP.Net Core,我的数据来自web api 2,但也许它仍然有效,所以你需要创建一个模型+ FromBody不应该被要求发布请求,因为它&#39 ; s是默认行为。