gpt4 book ai didi

c# - ASP.Net WebAPI Post 方法显示空值

转载 作者:行者123 更新时间:2023-12-02 17:24:02 25 4
gpt4 key购买 nike

从昨天开始我就一直被这个问题困扰。我开始使用 ASP.Net WebAPI 学习 knockoutjs。一切都工作得很好,直到我将数据发送回 API Controller 。每次我将数据粘贴到 Controller 时,它都会显示 Person 对象的每个字段的空值。

enter image description here

我尝试了一切,例如使用 $.ajax 和 contentType: 'application/json', 或 contentType: 'application/json, utf-8...' 但对我来说没有任何作用。请提供一些解决方案,我将非常感谢你..

这是WebAPI Post方法的代码:

// POST api/some
public HttpResponseMessage Post([FromBody]Person value)
{
repository.SavePerson(value);
return Request.CreateResponse(HttpStatusCode.OK);
}

这是 Person 类

public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
public List<string> activities { get; set; }
public string favoriteHobby { get; set; }
}

这是 javascript/knockout 代码

function PersonViewModel() {
var self = this;

self.firstName = ko.observable('');
self.lastName = ko.observable('');
self.activities = ko.observableArray([]);
self.favoriteHobby = ko.observable('');

self.loadUserData = function () {
$.getJSON("api/Some/Get", function (data) {
self.firstName(data.firstName);
self.lastName(data.lastName);
self.activities(data.activities);
self.favoriteHobby(data.favoriteHobby);
});
}

self.saveUserData = function () {
var data_to_send = { value: ko.toJSON(self) };
$.post("api/Some/Post", data_to_send, function (data) {
});
}
};

ko.applyBindings(new PersonViewModel());

最后是 HTML

<form action="#" method="post">
<p>
First name:
<input data-bind='value: firstName' />
</p>
<p>
Last name:
<input data-bind='value: lastName' />
</p>
<div>
Your favorite food:
<select data-bind='options: activities, value: favoriteHobby'>
</select>
</div>
<p>
<button data-bind='click: loadUserData'>Load Data</button>
<button data-bind='click: saveUserData'>Save Data</button>
</p>
</form>

最佳答案

如果你想像这样发布 JSON

{ "value" : {"firstName" : "Jane", "lastName" : "Doe" }  }

对于 ApiController 方法,您需要添加额外的“模型”服务器端

public class ValueModel
{
public Person value { get; set; }
}

public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
public List<string> activities { get; set; }
public string favoriteHobby { get; set; }
}

public HttpResponseMessage Post([FromBody]ValueModel model) { .. }

或者,将 {"value": ..} 放入 JSON 中,然后发布 var data_to_send = ko.toJSON(self)

这是因为模型绑定(bind)器绑定(bind)与您发布的 JSON 完全相同的“结构”。

关于c# - ASP.Net WebAPI Post 方法显示空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23650078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com