web-dev-qa-db-fra.com

Comment lire FormData dans Web api

J'ai WebApplication ASP.NET MVC, j'ai webapi webServvices ajouté.

J'ai le code javascript suivant.

var data = new FormData();
 data.append("filesToDelete", "Value");

$.ajax({

            type: "POST",
            url: "/api/FileAttachment/UploadFiles?clientContactId=" + clientContactId,
            contentType: false,
            processData: false,
            data: data,
            success: function (result) {

            },
            error: function (xhr, status, p3, p4) {


            }
        });

Voici le code WebApi:

  public void UploadFiles(int clientContactId)
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }


            var jsonContent = Request.Content.ReadAsStringAsync().Result;




        }

maintenant, comment lire jsonContent en fonction de la paire valeur/valeur passée à partir de javascript FormData 

j'ai essayé de JsonConvert.DeserializeObject<?> mais cela nécessite un type particulier de désérialisation.

je veux obtenir la valeur de la clé "filesToDelete" passée dans javascript FormData.

comment le lire?

merci

4
ghanshyam.mirani

Ce que je ferais c'est:

Côté client : Au lieu de passer clientContactId dans la chaîne de requête. Attachez la paire valeur/clé dans l'objet FormData lui-même. Définissez le type de données sur JSON.

var data = new FormData();
data.append("filesToDelete", "Value");
data.append("clientContactId", 
(clientContactId != undefined || clientContactId != null) ? clientContactId : ''));

$.ajax({
        type: "POST",
        url: "/api/FileAttachment/UploadFiles",
        /* ONLY IF YOU ARE UPLOADING A FILE
        contentType: false,
        processData: false, */
        dataType: "JSON"
        data: data,
        success: function (result) {

        },
        error: function (xhr, status, p3, p4) {


        }
    });

Côté serveur: Du côté serveur, nous pouvons obtenir la requête brute en utilisant HttpContext.Current.Request

Ainsi, nous pouvons obtenir les valeurs en utilisant simplement les valeurs de clé de FormData object dans HttpContext.Current.Request.Params["KeyValue"].

[HttpPost]
public void UploadFiles()
{
     var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
     var clientContactId= HttpContext.Current.Request.Params["clientContactId"];

     //Your code here...
}
7
Shahbaaz

Si vous souhaitez envoyer des données avec JSON de cette manière, vous devez définir un modèle en C # qui correspond au modèle que vous transmettez en JSON. Votre méthode de contrôleur WebApi ressemblera à ceci:

    public HttpResponseMessage Post([FromBody]WorkerAbsenceModel absence)
    {
        bool ok = svc.CreateWorkerAbsence(absence);
        if (ok)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }

        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
0
AndrewWhalan

S'il vous plaît utiliser le ci-dessous pour obtenir la valeur dans le contrôleur,

var filesToDelete = HttpContext.Request.Params["filesToDelete"];
var clientContactId= HttpContext.Request.Params["clientContactId"];
0

Pour obtenir la valeur "filesToDelete", vous pouvez utiliser JSON.NET . le code:

public void UploadFiles(int clientContactId)
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }        
            var jsonContent = Request.Content.ReadAsStringAsync().Result;

            JObject jObject = JObject.Parse(jsonContent);
            var filesToDelete = jObject["filesToDelete"];    
        }  
0
user1567453

Vous pouvez créer un objet dynamic

dynamic data = JsonConvert.DeserializeObject(jsonContent);

alors vous pouvez accéder à filesToDelete comme 

data.filesToDelete;
0
Mostafiz

Je pense que ce tutoriel du site Web ASP.NET pourrait être ce que vous recherchez:

Envoi de données de formulaire HTML dans une API Web ASP.NET: données codées par formulaire

En vous basant sur votre exemple de code, je ne suis pas sûr d'avoir besoin d'un type complexe à partir des données de formulaire ou d'un simple entier basé sur la méthode UploadFiles (int clientContactId) dans votre contrôleur API. La signature donne l'impression que vous essayez simplement de passer un entier. Si tel est le cas, votre méthode de contrôleur API pourrait ressembler à ceci:

[HttpPost]
public void UploadFiles(int clientContactId)
{
    //access the 'clientContactId' input parameter
    int id = clientContactId;
}

Et votre appel AJAX ressemblera à ceci:

$.ajax({
    url: '/api/controller/UploadFiles', //your app url
    type: 'POST',
    data: { clientContactId: 12345 },
    dataType: 'json',
    success: function (result) {
        //do whatever
    },
    error: function (result) {
        //do whatever
    }
});

Si vous avez déjà les données au format JSON dans votre JavaScript, vous pouvez les envoyer dans le corps des demandes. La méthode du contrôleur pourrait ressembler à ceci:

[HttpPost]
public void UploadFiles([FromBody] MyComplexType input)
{

}

Et votre appel AJAX pourrait ressembler à:

$.ajax({
    url: '/api/controller/UploadFiles', //your app url
    type: 'POST',
    data: JSON.stringify(input),
    dataType: 'json',
    success: function (result) {
        //do whatever
    },
    error: function (result) {
        //do whatever
    }
});

Consultez le tutoriel que j'ai lié à ci-dessus, je pense que cela peut expliquer les choses un peu mieux pour vous.

0
matt.f.c