Lire le corps de la demande dans ASP.NET
Comment lire le corps de la requête en ASP.NET? Je suis en utilisant le Client REST add-on pour Firefox pour former une demande pour une ressource sur un site que je suis en hébergement local, et dans le Corps de la Requête, je suis simplement mettre la chaîne "test" pour essayer de le lire sur le serveur.
Dans le code du serveur (qui est très simple MVC action) j'ai ceci:
var reader = new StreamReader(Request.InputStream);
var inputString = reader.ReadToEnd();
Mais quand je debug, inputString
est toujours vide. Je ne suis pas sûr de savoir comment d'autre (comme dans FireBug) pour confirmer que le corps de la requête est en effet d'être envoyé correctement, je suppose que je suis juste en supposant que l'add-on est en train de faire cela correctement. Peut-être que je suis en train de lire la valeur incorrecte?
source d'informationauteur David
Vous devez vous connecter pour publier un commentaire.
Peut-être que je suis misremembering mes études, mais je pense que les requêtes GET ne fait pas de ont un corps. Cette page membres.
Alors peut-être que vous êtes en train de faire les choses correctement, mais vous avez pour publier des données afin de disposer d'un corps de message?
Mise à jour
En réponse à votre commentaire, le plus "correct" Repos est d'envoyer chacune des valeurs comme son propre paramètre:
Alors votre action auto-lier ces si vous lui donnez un paramètre de tableau par le même nom:
Ou si vous êtes un masochiste, vous pouvez peut-être essayer de tirer les valeurs de
Request.QueryString
un à la fois.Me l'a récemment rappelé de cette vieille question, et je voulais ajouter une autre réponse pour être complet, basé sur les plus récentes mises en œuvre dans mon propre travail.
De référence, J'ai blogué sur le sujet récemment.
Essentiellement, le cœur de cette question était "Comment puis-je passer plus large et plus complexe de critères de recherche pour une ressource pour OBTENIR une liste filtrée des objets?" Et il a fini d'ébullition bas à deux choix:
La première option n'est pas idéal, parce que l'application est laid et l'URL sera susceptible de dépasser une longueur maximale à un certain point. La deuxième option, bien que fonctionnelle, n'a tout simplement pas de s'asseoir avec moi dans une de "repos" de sens. Après tout, je suis Arriver de données, droit?
Cependant, gardez à l'esprit que je ne suis pas juste l'Obtention de données. Je suis la création de une liste d'objets. Chaque objet existe déjà, mais la liste lui-même ne l'est pas. C'est une toute nouvelle chose, créé par l'émission de recherche/filtre critères du référentiel complet des objets sur le serveur. (Après tout, rappelez-vous qu'une collection d'objets est encore, lui-même, un objet).
C'est purement sémantique, mais une envie d'important. Parce que, dans sa plus simple expression, cela signifie que je peux l'utiliser confortablement POST pour ces critères de recherche pour le serveur. La réponse est les données que je reçois, donc je suis "recevoir" des données. Mais je ne suis pas "recevoir" des données dans le sens que je suis en fait de l'exécution d'une loi de la création, la création d'une nouvelle instance d'une liste d'objets qui se trouve être composé d'éléments préexistants.
Je vais parfaitement admettre que la limitation n'a jamais été technique, c'était juste de la sémantique. Il vient jamais "assis à droite" avec moi. Un non-problème technique exige une solution non technique, dans ce cas, une sémantique. En regardant le problème est légèrement différent de point de vue sémantique résultat est beaucoup plus propre solution, qui s'est avéré être la solution que j'ai fini par utiliser en premier lieu.
En dehors de la GET/POST question, je n'ai découvert que vous devez définir la Demande.InputStream position du début. Grâce à cette réponse j'ai trouvé.
Spécifiquement le commentaire
Qui j'ai traduit en
Je voudrais essayer à l'aide de la HttpClient (disponible via Nuget) pour faire ce type de chose. C'est tellement plus facile que l'System.Net objets
Lecture directe à partir de la Demande.InputStream dangereux parce que quand la re-lecture obtiendrez null même si les données existent. Ceci est vérifié dans la pratique.
Fiable de lecture est effectuée comme suit: