Zunächst möchte ich nur sagen, dass es viele ähnliche Fragen zu diesem bereits hier gepostet, aber ich habe alle Lösungen ausprobiert und hatte keine Freude .Weitergabe von Daten von einem jQuery Ajax Anruf an eine MVC ApiController Aktion verliert Daten
Ich habe eine MVC ApiController Aktion, deren Unterschrift ist:
public void Post([FromBody] Employee employee)
Ich habe versucht, mit oder ohne [FromBody].
Meine Klasse Employee 5 Mitglieder von Basistypen hat, int, string, string, string, double
ich die Aktion von einer separaten Domäne Aufruf (beide auf meinem localhost mit Cors), jQuery Ajax wie folgt :
$.ajax({
url: "http://localhost:55555/api/Employees",
type: "POST",
headers: {
"Authorization": "Bearer " + sessionStorage.getItem("accessToken")
},
data: {
Id: 100,
FirstName: "Fred",
LastName: "Blogs",
Gender: "Male",
Salary: 100000
},
// ...
Das funktioniert absolut in Ordnung. Es gibt kein Problem mit der Autorisierung. Das Mitarbeiterobjekt auf dem Controller wird mit diesen Daten gefüllt. Aber was ich tun möchte, ist, die Daten in einem „strukturierten‘ Art und Weise senden Also meine Daten wie folgt aussehen würde:..
data: {
employee: employee
},
Ich habe versucht, alles, was ich denken kann, den Mitarbeiter-Format angegeben alle Kombinationen von:
contentType: "application/json; charset=utf-8",
dataType: "json",
mit verschiedenen Arten kombiniert zu „stringify“ meine Mitarbeiter Objekt:
var employee = {
Id: 100,
FirstName: "Fred",
LastName: "Blogs",
Gender: "Male",
Salary: 100000
};
employee = JSON.stringify({ "employee": employee });
employee = JSON.stringify(employee);
bei dieser bezieht sich (wie ein einfacheres Beispiel) ich habe diese Methode auch auf meinem ApiControll er:
public void Delete([FromBody] int employeeId)
Wieder kann ich die employeeId nicht in der "gewünschten" Weise übergeben.
Ich kann nicht einmal erhalten:
data: {
employeeId: 100
},
zu arbeiten!?!
Ich kann die Delete-Methode funktionieren, wenn ich es zu [FromUri] ändern und die "? EmployeeId = 100" in der aufrufenden URL angeben.
Ich hatte gehofft, dass ich über den verschiedenen Aufruf ein wenig konsistenter sein könnte und immer ein "Objekt" im JSON-Format übergeben.
Hat jemand irgendwelche Ideen, die mir helfen können, Fortschritte zu machen?
Danke.
Weitere Informationen zum Anruf löschen.
Wenn ich Postman verwenden, Voraussetzung für die Authentifizierung entfernen, geben Sie Content-Type "application/json" im Header und employeeId = 100 in den Körper, gibt Postman:
{
"Message": "The request is invalid.",
"MessageDetail": "The parameters dictionary contains a null entry for parameter 'employeeId' of non-nullable type 'System.Int32' for method 'Void Delete(Int32)' in 'WebApi.Controllers.EmployeesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}
Ich habe das versucht. Wiederum mit allen Kombinationen von dataType/contentType. Die Methode wird aufgerufen, aber alle Eigenschaften des Employee-Objekts haben innerhalb der ApiController-Aktion immer noch ihre Null-Null-Werte. –
Versuchen Sie, 'content: 'application/json', datatype: "json"' zu '.ajax' Setup $ – JohanP
Immer noch der Mitarbeiter Objekt auf dem Server hat Standardwerte: var employee = { Id: 100, Vorname: "Fred", Nachname: "Blogs" Geschlecht: "männlich", Gehalt: 100000 }; $ Schnipsel ({ url: "http: // ..., Typ: "POST", Header: { "Authorization": "Bearer" + sessionStorage.getItem (" accessToken ") }, contentType: "application/json", dataType: "json", daten: JSON.stringify ({angestellter: angestellter}), –