web-dev-qa-db-de.com

AJAX und Web-API-Post-Methode - Wie funktioniert das?

Ich versuche mit AJAX/Jquery und c # in meine Datenbank zu schreiben. Immer wenn ich den Parameter an den C # -Code übergeben, wird er als Null angezeigt. Ich verwende die Standardvorlage, die Visual Studio beim Erstellen einer Controller-Klasse erstellt. Jede Hilfe wäre dankbar!

Hinweis: Dies ist ein Ruhedienst, den ich anrufen möchte. (Eine normale ASP - Website ... nicht MVC. Auch die GET-Rest-API funktioniert einwandfrei.)

Jquery/AJAX:

        var dataJSON = { "name": "test" }

        $('#testPostMethod').bind("click", GeneralPost);
        function GeneralPost() {
            $.ajax({
                type: 'POST',
                url: '../api/NewRecipe',
                data:JSON.stringify(dataJSON),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'
            });
        }

C #

    //If I remove the [FromBody] Tag then when I click the button this method is never called.
    public void Post([FromBody]string name)

    {

    }

BEARBEITEN:

Ich habe meinen Code leicht angepasst, stößt aber immer noch auf das gleiche Problem. Um es zusammenzufassen: Es lädt die Methode POST, die jedoch in null übergeben wird.

C #

 public class RecipeInformation
    {
        public string name { get; set; }

    }

        public void Post(RecipeInformation information)

        {

        }

AJAX:

    var dataJSON = { information: { name: "test" } };

    $('#testPostMethod').bind("click", GeneralPost);
    console.log(dataJSON);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '../api/NewRecipe',
            data: dataJSON,
            contentType: 'application/json; charset=utf-8',
        });
    }
23
Yecats

Für den einfachen Typ auf der Serverseite:

public void Post([FromBody]string name)
{
}

auf der Clientseite legen Sie einfach fest, ob Sie im Json-Format senden möchten:

    var dataJSON = "test";

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '/api/NewRecipe',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }

Wenn Sie es in einem komplexen Typ arbeiten lassen möchten, sollten Sie auf der Serverseite Folgendes definieren:

public class RecipeInformation
{
    public string name { get; set; }
}

public class ValuesController : ApiController
{
    public void Post(RecipeInformation information)
    {
    }
}

Und vom Kunden:

    var dataJSON = { name: "test" };

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '/api/NewRecipe',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }
50
cuongle

Ich nehme an, Sie verwenden ASP.NET WebAPI und binden alle einfachen Typen (int, bool, string usw.) von der URL und alle komplexen Typen von body. Wenn Sie den Namen mit dem Attribut FromBody markiert haben, binden Sie ihn anstelle der URL-Zuordnung vom Anforderungshauptteil aus.

Weitere Informationen zum ASP.NET WebAPI-Routing und zur Parameterbindung finden Sie hier: 

2

Sie können so etwas versuchen und die Methode jquery param verwenden

    var postData = {
        name : 'name'
    }

    $('#testPostMethod').bind("click", GeneralPost);
    function GeneralPost() {
        $.ajax({
            type: 'POST',
            url: '../api/NewRecipe',
            data: $.param(postData,true),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json'
        });
    }
2

Es fehlt ein Teil an den Datenvertragsattributen Wenn Sie eine Klasse wie die folgende erstellen:

[DataContract]
public class RecipeInformation
{
    [DataMember]
    public string name { get; set; }
}

Diese Attribute befinden sich in System.Runtime.Serialization, und der Json-Parser (Json.NET) verwendet sie zur Deserialisierung des Modells.

Das Einbinden in API-Controllern ist etwas seltsam. Ich glaube:

public void Post([FromBody]RecipeInformation information)

mit

var dataJSON = { name: "test" };

sollte funktionieren und wird definitiv funktionieren, wenn Sie es einfach als Formulardaten übergeben.

1
Yaur

$ ("# updateuser"). click (Funktion () {

        var id = $("#id").val();
        var dataJSON = $("#username").val();

        alert("" + dataJSON);

        $.ajax({


            url: 'http://localhost:44700/api/Home/' + id,
            type: 'PUT',
            data: JSON.stringify(dataJSON),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',

            success: function (data, textStatus, xhr) {
                $.each(data, function (key, val) {
                    $("<li>" + val + "</li>").appendTo($("#names"));
                })
            },
            error: function (xhr, textStatus, errorThrown) {
                alert('Error in Operation');
            }

            })

    })
0
Rai Ahmad Fraz

Ich fand das Problem mit Hilfe von Microsoft Docs

$.post('api/updates/simple', { "": $('#status1').val() });

Was ich vermisst habe, war das Hinzufügen eines leeren Eigenschaftennamens. Daher muss OP nur {"":data:JSON.stringify(dataJSON)}, anstelle von data:JSON.stringify(dataJSON),

0
RobLudlmsFrn