我一直试图解决这个问题几个小时,但没有一个解决方案似乎有所帮助。我有一个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]买家买家"但是我没有它的对象,我只想要数据。有可能吗?
答案 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是默认行为。