25 messaggi dal 12 settembre 2010
Ciao a tutti,
sto provando a fare il post di un file e di dati utilizzando angularjs e le webapi.
Purtroppo all'interno del metodo che ho creato nelle webapi non riesco ad accedere al file di cui sto facendo il post (i campi o i valori di cui faccio il post non sono all'interno di un tag <form>).

Di seguito cerco di darvi indicazioni rispetto al codice che ho implementato:

Ho realizzato questa funzione che prende i dati e poi fa una chiamata post:

$scope.Aggiungi = function () {
   var jsonConfProd = _.omitBy($scope.filtri, function (value, key) { return key == 'Pezzi'; });
   var formdata = new FormData();
   angular.forEach(jsonConfProd, function (value, key) {
      formdata.append(key, jsonConfProd[key]);
   });
   var options = {
      method: 'POST',
      url: '/api/test/aggiungi',
      transformRequest: angular.identity,
      headers: {
         'Content-Type': undefined
      },
      data: formdata
   }
   ApiCall.ApiCallCustomHeaders(options).success(function (data) {
      console.log('data ', data);
   });
}


Tramite la console di sviluppo del browser noto che nella chiamata il payload è il seguente:

------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="FormatoBase,FormatoAltezza"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Parte1DescrMaterialeWeb"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Parte1Grammatura"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Parte1ColoriB,Parte1ColoriV"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Verificafile"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="UploadFile"

[object FileList]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="NomeProgetto"

test
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="CodiceProdotto"

17W2324
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Pezzi"

100
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Totale"

42.82
------WebKitFormBoundaryC0NGpd2zBgEHs2iv--


Ed il metodo che ho creato all'interno della webapi è questo:

[ActionName("aggiungi")]
[HttpPost]
[Route("aggiungi")]
public IHttpActionResult aggiungi()
{
    try
    {
        HttpContext context = HttpContext.Current;
        HttpRequest request = context == null ? null : context.Request;
        if(request != null)
        {
            return Ok();
        }
        catch (Exception ex)
        {
            return Content<Exception>(HttpStatusCode.NotFound, ex);
        }
    }
}


Pensavo di riuscire ad accedere ai dati e al file rispettivamente con HttpContext.Current.Request.Form e HttpContext.Current.Request.Files ma praticamente Request.Files è sempre vuoto.

Spero che qualcuno possa aiutarmi e indicarmi dove sto sbagliando.

Vi ringrazio in anticipo.

Saluti.
10.746 messaggi dal 09 febbraio 2002
Contributi
Ciao,
per prima cosa dovresti sistemare i dati che il client sta inviando al server. Infatti, se guardi la richiesta ci sono delle parti non corrette.
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="FormatoBase,FormatoAltezza"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Parte1DescrMaterialeWeb"

[object Object]
------WebKitFormBoundaryC0NGpd2zBgEHs2iv
Content-Disposition: form-data; name="Parte1Grammatura"


Come vedi ci sono delle stringhe [object Object] che non vanno bene. Vuol dire che stai cercando di inviare un oggetto Javascript senza prima averlo serializzato in JSON con la funzione JSON.stringify.
Se invece si tratta di un file selezionato dall'utente mediante un campo input type="file", allora fai riferimento a questa pagina per capire come aggiungerlo all'oggetto FormData.
https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

ciao,
Moreno
Modificato da BrightSoul il 19 giugno 2018 14.11 -

Enjoy learning and just keep making
25 messaggi dal 12 settembre 2010
Ciao Moreno,
ho serializzato i dati che mi hai indicato e ho sistemato anche l'invio del file e ora lato webapi riesco a leggere correttamente tutti i dati...che dire...grazie e sei un grande!!! :)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.