Obtenir le contexte owin actuel en mode auto-hôte
J'ai besoin d'exécuter mon application qui permet de ASP.NET l'API Web services IIS et .NET CLR auto modes d'accueil.
J'ai développé mon ASP.NET l'API Web services basés sur OWIN et il fonctionne très bien sur les deux hôtes.
Pour l'instant j'ai besoin de quelque chose comme ceci:
public class OwinContextInfrastructure
{
public static IOwinContext Current
{
get
{
if (HttpContext.Current != null)
{
return HttpContext.Current.GetOwinContext();
}
else
{
//What should I do here ?
return null;
}
}
}
}
à obtenir en cours owin contexte à chaque fois que j'ai besoin dans mon application.
Mon code fonctionne bien sur IIS, mais que dois-je faire dans .NET Auto en mode Hôte ?
source d'informationauteur Yaser Moradi
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Request.GetOwinContext()
pour les deux d'hébergement web et de l'auto-hébergement.GetOwinContext
est une méthode d'extension pourHttpRequestMessage
et est défini dans le System.Web.Http.Owin.dll de l'assemblée.Mise à JOUR
J'ai répondu à votre question initiale, qui est de savoir comment obtenir OWIN contexte à la fois d'hébergement web et de l'auto-hébergement. Maintenant, grâce à votre question dans les commentaires, vous avez considérablement élargi la portée de votre question. Il y a un problème fondamental.
IOwinContext
n'est pas un OWIN chose, c'est un Katana chose. Vous ne pouvez pas attendre de n'importe quel cadre hébergés sur OWIN afin de fournir un contexte dans le formulaire deIOwinContext
. ASP.NET Web API, mais pas tout le cadre est censé le faire.IOwinContext
est une abstraction au-dessus OWIN environnement et le dictionnaire de ce dictionnaire seront disponibles pour tous les OWIN middleware. Toutefois, en travaillant sur le dessus d'un cadre, vous ne pouvez plus accéder à la OWIN environnement directement, mais seulement par le biais de la manière dont ce cadre de travail a décidé d'exposer le contexte.Pour Nancy, vous devez utiliser
NancyContext
pour se rendre à l'Items
dictionnaire et chercher la valeur correspondant à la clé "OWIN_REQUEST_ENVIRONMENT". Pour SignalR,Environment
propriété deIRequest
vous donne accès à OWIN de l'environnement. Une fois que vous avez la OWIN de l'environnement, vous pouvez créer un nouveauOwinContext
à l'aide de l'environnement.Tout d'abord, j'ai corriger ma question.
HttpContext.Le courant est disponible dans les applications qui sont basées sur ASP.NET et intégré IIS pipeline.Mais Nous ne pouvons pas utiliser cette classe sans asp.net n'importe où, même sur IIS pipeline intégré.
Réponse:
1 - n'importe où vous avez besoin IOwinContext, vous avez à obtenir, à l'aide de l'injection de dépendance, par exemple par le constructeur de l'injection.
2 - Configurer tout ce qui est à travailler sur la base Owin, SignalR est Owin basée uniquement, mais l'utilisation de l'Api Web & owin ensemble, et l'utilisation de nancy pour le serveur de vues de côté le cas échéant. Au lieu d'écrire IIS ou ASP.NET les gestionnaires et les modules, de développer owin middlewares.
3 - À L'Aide De Autofac.Owin & AutoFac.WebApi & AutoFac.WebApi.Owin & Autofac.SignalR, vous pouvez configurer l'injection de dépendance dans tous owin middlewares vous avez dans votre application.
4 - Autofac va instancier contrôleurs d'api web, signalr, les moyeux et les owin middlewares, et il va passer IOwinContext instance de classes que vous le souhaitez à l'aide du constructeur d'injection.
Mes tests sont ok sur Owin IIS/Helios (sans asp.net) , Owin SelfHost et même Owin Serveur de Test.
Cette approche est similaire à asp.net vNext. Vous pouvez facilement migrer votre application asp.net vNext, quand il est prêt pour la production.