Ich versuche, ein Objekt von einem Angular Post auf eine ASP.Net MVC Core Web API Post-Methode zu buchen.Kann ich ein komplexes Objekt mit Eigenschaften, die selbst Objekte sind, an einen FromBody-Parameter in der Core Web API senden?
Die Winkelfunktion sieht wie folgt aus:
$scope.addAction = function (pAction, pCaseId) {
pAction.caseId = pCaseId;
$http.post(actionUrl, pAction)
.then(function (response) {
$scope.data.actions.push(response.data);
})
.catch(function (error) {
$scope.data.ActionInsertError = error;
});
}
Alles ist gebaut immer genau so, wie ich direkt vor dem POST wollen:
Hier ist die Net-Core-Web-API-POST :
[HttpPost]
public async Task<Generic.Model.Lerd.Action> Post([FromBody]ActionFromBodyModel model)
{
long result;
Generic.Model.Lerd.Action action;
using (var conn = _context.Database.GetDbConnection())
{
conn.Open();
using (var command = conn.CreateCommand())
{
StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO Actions ");
sb.Append("(ActionStatus, ActionTypeId, CaseId, DateCreated, Notes) ");
sb.Append("VALUES ");
sb.Append("(@ActionStatus, @ActionTypeId, @CaseId, @DateCreated, @Notes); ");
sb.Append("SELECT CAST(scope_identity() AS int);");
command.CommandText = sb.ToString();
command.Parameters.Add(new SqlParameter("@ActionStatus", SqlDbType.Int) { Value = model.ActionStatus });
command.Parameters.Add(new SqlParameter("@ActionTypeId", SqlDbType.BigInt) { Value = model.ActionTypeId });
command.Parameters.Add(new SqlParameter("@CaseId", SqlDbType.BigInt) { Value = model.CaseId });
command.Parameters.Add(new SqlParameter("@DateCreated", SqlDbType.DateTime) { Value = DateTime.Now });
command.Parameters.Add(new SqlParameter("@Notes", SqlDbType.NVarChar) { Value = model.Notes });
try
{
result = (int)command.ExecuteScalar();
action = await _genericService.GetSingleIncludingAsync(result,
a => a.ActionType);
}
catch(Exception ex)
{
throw ex;
}
}
}
return action;
}
Hier ist das FromBody-Modell:
public class ActionFromBodyModel
{
public long CaseId { get; set; }
public long ActionTypeId { get; set; }
public long ActionStatus { get; set; }
public string Notes { get; set; }
}
Ich kann meine Top-Level-Eigenschaften hier:
Jetzt versuche ich, das ActionType1 Objekt aus PCase im Angular Beitrag zum Web-API-Pfosten zu erhalten.
So füge ich diese Eigenschaft in das FromBody Modell:
public class ActionFromBodyModel
{
public long CaseId { get; set; }
public long ActionTypeId { get; set; }
public long ActionStatus { get; set; }
public string Notes { get; set; }
public ActionType1 ActionType1 { get; set; }
}
ActionType1 wie folgt aussieht:
public class ActionType1 : BaseEntity
{
[ForeignKey("Id")]
public long ActionId { get; set; }
public virtual Action Action { get; set; }
public long ActionProposedBySupervisorId { get; set; }
[ForeignKey("ActionProposedBySupervisorId")]
public LookupDetail ActionProposedBySupervisor { get; set; }
public long ActionTakenBySupervisorId { get; set; }
[ForeignKey("ActionTakenBySupervisorId")]
public LookupDetail ActionTakenBySupervisor { get; set; }
public DateTime ActionEffectiveDate { get; set; }
}
Aber wenn ich diese Eigenschaft in hinzufügen, mein ganzes FromBody Objekt ist null auf der Post . Ich bekomme nicht einmal die Top-Level-Eigenschaften.
Gibt es eine Möglichkeit, komplexe Objekte wie diese zu posten?