将JavaScript对象传递给C#

时间:2015-09-22 16:41:42

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

我正在尝试在Azure SQL数据库中托管的表中创建一个新行。我的前端是AngularJS,在.NET中使用C#作为后端。 这是我从前端传递对象的代码:

var insertTicket = function (newTicket) {
    return $http.post("http://localhost:50412/api/tickets", JSON.stringify(newTicket))
                .then(function (response) {
                    console.log(response);
                    console.log("Insert Successful");
                    return;
                });

这是我的后端代码,它接收数据并尝试添加到数据库中:

[Route("api/tickets")]
public HttpResponseMessage Post(Ticket t)
{
    TicketsRepository.InsertTicket(t);
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

在TicketRepisitory中:

public static void InsertTicket(Ticket tick)
{
    var maxID = (from ticket in dataContext.Tickets
                 select ticket.id).Max();
    var tick = new Ticket();
    tick.id = maxID + 1;

    dataContext.Tickets.Add(tick);
    dataContext.SaveChanges();
}

这是我的Ticket课程:

public partial class Ticket
{
    //Properties
    public int id { get; set; }
    public string title { get; set; }
    public string customer { get; set; }
    public string barcode { get; set; }
    public string assignedTo { get; set; }
    public string category { get; set; }
    public string importance { get; set; }
    public Nullable<System.DateTime> openDate { get; set; }
    public Nullable<System.DateTime> dueDate { get; set; }
    public Nullable<System.DateTime> closedDate { get; set; }
    public string comments { get; set; }
    public string condition { get; set; }
    public Nullable<int> workHours { get; set; }

    //Relationships

    public Employee Employee { get; set; }
    public Employee Employee1 { get; set; }
    public Equipment Equipment { get; set; }

}

我认为问题在于Post()期待票证对象。我已经尝试过搜索如何接收JSON数据并将其用于Ticket,但运气不错 我的问题是我无法创建新行。我的数据库中没有反映任何变化。

2 个答案:

答案 0 :(得分:0)

在AngularJS中使用$http发布数据时,您不需要var insertTicket = function (newTicket) { return $http.post("http://localhost:50412/api/tickets", newTicket) .then(function (response) { console.log(response); console.log("Insert Successful"); return; }); 您的对象,只需将对象本身作为第二个参数传递,如下所示:

forceSelection

答案 1 :(得分:0)

首先,不需要在newticket javascript对象上调用JSON.stringify()方法作为$ http.post()方法的第二个参数。

然后在web api方法中编写一个名为newTicket的JObject类型的参数来接收发布的对象,并使用通用版本的ToObject方法将发布的数据转换为所需的类型。不要忘记使用[FromBody]属性作为方法参数。 webapi的代码如下所示:

{{1}}