Ce n'est pas une réponse directe, mais plutôt une direction de conception légèrement différente:
Ne publiez pas les données sous forme de formulaire, mais en tant qu'objet JSON à mapper directement sur un objet côté serveur, ou utilisez la variable de chemin de style REST
Maintenant, je sais qu'aucune des options ne pourrait convenir dans votre cas puisque vous essayez de passer une clé XSRF. Le mapper dans une variable de chemin comme celle-ci est une conception terrible:
http://www.someexample.com/xsrf/{xsrfKey}
Parce que par nature, vous voudriez également passer la clé xsrf à un autre chemin /login
, /book-appointment
etc., et vous ne voulez pas salir votre jolie URL
Il est intéressant de l'ajouter en tant que champ d'objet n'est pas approprié non plus, car maintenant sur chaque objet json que vous passez au serveur, vous devez ajouter le champ
{
appointmentId : 23,
name : 'Joe Citizen',
xsrf : '...'
}
Vous ne voulez certainement pas ajouter un autre champ sur votre classe côté serveur qui n'a pas d'association sémantique directe avec l'objet domaine.
À mon avis, la meilleure façon de transmettre votre clé xsrf est via un en-tête HTTP. De nombreuses bibliothèques de frameworks Web côté serveur de protection xsrf le prennent en charge. Par exemple, dans Java Spring, vous pouvez le passer en utilisant l'en- X-CSRF-TOKEN
tête .
L'excellente capacité d'Angular de lier un objet JS à un objet d'interface utilisateur signifie que nous pouvons nous débarrasser de la pratique de publier le formulaire tous ensemble et de publier JSON à la place. JSON peut être facilement désérialisé en objet côté serveur et prend en charge des structures de données complexes telles que la carte, les tableaux, les objets imbriqués, etc.
Comment publier un tableau dans une charge utile de formulaire? Peut-être comme ça:
shopLocation=downtown&daysOpen=Monday&daysOpen=Tuesday&daysOpen=Wednesday
ou ca:
shopLocation=downtwon&daysOpen=Monday,Tuesday,Wednesday
Les deux sont de mauvaise conception ..