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
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...
}
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);
}
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"];
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"];
}
Vous pouvez créer un objet dynamic
dynamic data = JsonConvert.DeserializeObject(jsonContent);
alors vous pouvez accéder à filesToDelete
comme
data.filesToDelete;
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.