入门后数组中Asp.net MVC [英] Getting post array in Asp.net MVC
问题描述
我写处理短信的联系人网络API2程序。有一个JSON帖子这样的服务器:
I am writing a web api2 program that handles sms-contacts. There is a JSON post to the server like this:
{
"Id":"4",
"ClientId":"2",
"NoOfRecipient":"3",
"Numbers":
{
"num1":9898776568,
"num2":9087674589
},
"Msg":"This is a test"
}
和服务器我有一个类如下处理这个JSON:
and in Server I have a class to handle this JSON as below:
public class SmsData
{
public int Id { get; set; }
public int ClientId { get; set; }
public int NoOfRecipient { get; set; }
public IEnumerable<Numbers> Numbers { get; set; }
public string Msg { get; set; }
public DateTime SentDate { get; set; }
}
public class Numbers{
public int Id { get; set; }
public long Number { get; set; }
}
[Table("SmsData")]
public class StoreSmsData
{
public int Id { get; set; }
public int ClientId { get; set; }
public int NoOfRecipient { get; set; }
}
[Table("SmsSentNumbers")]
public class SentNumbers
{
public int Id { get; set; }
public int ClientId { get; set; }
public long Numbers { get; set; }
public int NumbersId { get; set; }
public string Msg { get; set; }
public DateTime SentDate { get; set; }
}
和控制器是:
public HttpResponseMessage Post(SmsData smsData)
{
SmsHandler smsHandler = new SmsHandler();
Clients client = smsHandler.GetClient(smsData.ClientId);
if (client == null)
{
return Request.CreateResponse<SmsData>(HttpStatusCode.NotFound, smsData);
}
else if (smsData.NoOfRecipient > client.SmsAllowed)
{
return Request.CreateResponse<SmsData>(HttpStatusCode.NotAcceptable, smsData);
}
StoreSmsData ssd = new StoreSmsData();
ssd.ClientId = smsData.ClientId;
ssd.NoOfRecipient = smsData.NoOfRecipient;
ssd = dbContext.StoreSmsData.Add(ssd);
dbContext.SaveChanges();
var response = Request.CreateResponse<StoreSmsData>(HttpStatusCode.Created, ssd);
SentNumbers sn = new SentNumbers();
foreach(Numbers num in smsData.Numbers){
sn.ClientId = smsData.ClientId;
sn.Msg = smsData.Msg;
sn.SentDate = smsData.SentDate;
sn.Numbers = num.Number;
sn.NumbersId = num.Id;
dbContext.SentNumbers.Add(sn);
dbContext.SaveChanges();
}
response = Request.CreateResponse<SentNumbers>(HttpStatusCode.Created, sn);
return response;
}
现在,当我访问服务器将返回该响应消息:
Now when I access the server it returns this Response Message:
{
"Message":"An error has occurred.",
"ExceptionMessage":"Object reference not set to an instance of an object.",
"ExceptionType":"System.NullReferenceException",
"StackTrace":" at System.Web.Http.ApiController.<InvokeActionWithExceptionFilters>d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()"
}
我不明白的问题。我怎样才能在数字存储在不同的表。
同时,当我和断点调试的数字和消息值为null 。我怎么可以存储number.In客户端后是好的...
I cannot understand the problem. How can i store the numbers in a different table. Also when I debugged with break point the Numbers and Msg value is null. How can I Store the number.In Client Side the Post is fine...
推荐答案
我不看你的JSON格式是错误的。比方说,
I do see your JSON formatting is wrong. Say for example,
工作code
如果您有复杂的模型如下:
If you have complex model as follows
public class SmsData
{
public int Id { get; set; }
public IEnumerable<Numbers> SmsNumbers { get; set; }
}
public class Numbers
{
public int Id { get; set; }
public long Number { get; set; }
}
那么你的行动是通过以下方式 -
Then your Action is in the following way -
public void Post(SmsData client)
{
}
然后,你需要在以下方式JSON调用 -
Then you need to make a JSON call in the following way -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function SendSms() {
var studentData = {
"Id": 29,
"SmsNumbers": [{ "Id": 98, "Number" : 123 }, { "Id": 90, "Number" : 130 }]
};
$.ajax({
type: "POST",
url: "http://localhost:23133/api/values",
data: JSON.stringify(studentData),
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true,
success: function (data, status, jqXHR) {
console.log(data);
console.log(status);
console.log(jqXHR);
alert("success..." + data);
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
</script>
<input type="submit" onclick="SendSms()" value="Click" />
观察孩子节点的数据格式 -
Observe the child nodes data format -
var studentData = {
"Id": 29,
"SmsNumbers": [{ "Id": 98, "Number" : 123 }, { "Id": 90, "Number" : 130 }]
};
同样需要格式化JSON嵌套类格式。
当我调试我得到了所有的价值观 -
Similarly you need to format the nested classes format in JSON. When I debug I got all the values -
这篇关于入门后数组中Asp.net MVC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!