J'ai une fonction dans un contrôleur que je teste en unité et qui attend des valeurs dans l'en-tête de la requête http. Je ne peux pas initialiser le HttpContext car il est en lecture seule.
Ma fonction de contrôleur attend une valeur d'en-tête de requête http pour "device-id".
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
//not valid controller.HttpContext is readonly
//controller.HttpContext = new DefaultHttpContext();
var result = controller.Get();
Assert.AreEqual(result.Count(), 2);
}
Existe-t-il un moyen simple de le faire sans utiliser une bibliothèque tierce ?
2 votes
Ne fais pas ça. utiliser HttpContext ? L'intérêt d'utiliser des contrôleurs est que les données passent par les paramètres du contrôleur. Si votre contrôleur utilise le HttpContext pour lire les données comme s'il s'agissait d'une page WebForms, vous avez un problème.
1 votes
@PanagiotisKanavos La valeur de l'en-tête est un élément d'information indiquant de quel appareil mobile provient l'appel. Cette information est nécessaire pour récupérer les données correctes. L'ID de l'appareil est dans l'en-tête parce que l'ID est nécessaire pour l'authentification, qui est gérée par un filtre d'action personnalisé. Je pourrais transmettre l'ID de l'appareil en tant que paramètre de route, mais ce serait redondant.
0 votes
Vérifiez FromHeaderAttribute mais aussi le duplicata. HttpContext est injectable par la configuration maintenant.
1 votes
Je vous suggère de modifier votre question pour spécifier exactement ce que vous voulez (accès aux champs d'en-tête pour identifier les appareils mobiles). La documentation ASP.NET semble traverser une période de "transition", pour parler gentiment, avec des pages de documentation manquantes. .... période de "transition" pour le dire gentiment, avec des pages de documentation manquantes. Consultez cette question presque identique qui demande comment acheminer les appareils mobiles