Comment implémenter HttpMessageHandler dans l'API Web?
Dans un ASP.NET 4.5 MVC 4 Web API projet, je veux ajouter un HttpMessageHandler
. J'ai changé WebApiConfig
classe (dans \App_Satrt\WebApiConfig.cs), comme suit:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new MyCustomizedHttpMessageHandler()
);
}
}
Ensuite, j'ai développé MyCustomizedHttpMessageHandler
:
public class MyCustomizedHttpMessageHandler : HttpMessageHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
IPrincipal principal = new GenericPrincipal(
new GenericIdentity("myuser"), new string[] { "myrole" });
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
return Task<HttpResponseMessage>.Factory.StartNew(() => request.CreateResponse());
}
}
Toutefois, la requête à l'API (disons http://mylocalhost.com/api/values), renvoie toujours le code d'état 200, sans aucune donnée. Je veux dire, il n'arrive jamais à ValuesController.cs " GET ()".
Qu'ai-je manqué? Comment puis-je mettre en œuvre HttpMessageHandler
correctement?
PS: Avoir déjà lu: https://stackoverflow.com/a/12030785/538387 , ne m'aide pas.
source d'informationauteur Tohid
Vous devez vous connecter pour publier un commentaire.
Ici, vous êtes à la création d'un
HttpMessageHandler
qui court-circuits de la demande et ne pas laisser la demande de passer à travers le reste de la canalisation. Au lieu de cela, vous devez créer unDelegatingHandler
.Aussi il y a 2 sortes de gestionnaire de messages de pipelines dans l'API Web. L'un est un habitué de pipeline dans lequel toutes les demandes pour toutes les routes passent à travers et d'autres où l'on pourrait avoir des gestionnaires de messages spécifiques à certaines routes seulement.
Essayez de créer un
DelegatingHandler
et l'ajouter à votreHttpConfiguration
la liste des gestionnaires de messages:Si vous souhaitez ajouter une route spécifique, gestionnaire de message, puis vous pouvez faire ce qui suit:
Cette Api Web Affiche montre la canalisation des flux.
Pour écrire un message personnalisé gestionnaire, vous devez dériver de
System.Net.Http.DelegatingHandler
Et appel
base.SendAsync
d'envoyer la demande à l'intérieur de gestionnaire.