3 votes

L'ASP.Net WebAPI ne fonctionne pas avec Owin lorsqu'il est hébergé par XSP/Mono.

J'essaie d'exécuter un projet ( voir la solution ici ) en utilisant le mono qui a ASP .net Web API y Owin composants. Le projet est construit avec succès. Cependant, lorsque j'atteins le point de terminaison http://127.0.0.1:6666/customers Je reçois l'erreur suivante.

System.Web.HttpException  
The resource cannot be found.

Description: HTTP 404.The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is  temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Details: Requested URL: /customers

Exception stack trace:
at System.Web.StaticFileHandler.ProcessRequest (System.Web.HttpContext context) [0x000a1] in /builddir/build/BUILD/mono-4.4.0/mcs/class/System.Web/System.Web/StaticFileHandler.cs:77 
at System.Web.DefaultHttpHandler.BeginProcessRequest  (System.Web.HttpContext context, System.AsyncCallback callback, System.Object state) [0x00098] in /builddir/build/BUILD/mono-4.4.0/mcs/class/System.Web/System.Web/DefaultHttpHandler.cs:101 
at System.Web.HttpApplication+<Pipeline>c__Iterator1.MoveNext () [0x00d9c] in /builddir/build/BUILD/mono-4.4.0/mcs/class/System.Web/System.Web/HttpApplication.cs:1335 
at System.Web.HttpApplication.Tick () [0x00000] in /builddir/build/BUILD/mono-4.4.0/mcs/class/System.Web/System.Web/HttpApplication.cs:927 

Cependant, CustomersController.Get() a été appelé correctement, ce qui signifie que le framework a pu aller vers le bon contrôleur. Mais quelque chose de MAUVAIS se produit après le point de terminaison.

Note : Il convient de mentionner que la normale ASP .Net Web API projet (sans OWin ) fonctionne bien. Le problème est le suivant seulement lors de OWin l'intégration.

J'utilise :

Compilateur JIT Mono, version 4.4.0
Monodevelop 5.10
Consultez le site paquets.config pour les versions des paquets Nuget
Voici le WebApiConfig.cs
Voici le CustomerController.cs
Voici le Web.config

Si vous souhaitez faire un essai, veuillez se référer/tirer le code et l'importer dans monodevelop.

J'ai essayé d'exécuter cette solution sous Windows et cela a bien fonctionné.
Je ne parviens pas à trouver la cause de ce comportement. Si quelqu'un peut me donner des conseils pour résoudre ce problème, ce serait très utile.

1voto

0xced Points 10972

Si vous avez absolument besoin de faire tourner votre application sur XSP, je n'ai pas de solution pour vous, désolé. J'ai commencé à lire le manuel de Mono code source de System.Web.HttpApplication pour essayer de comprendre pourquoi la demande serait traitée par le gestionnaire de fichiers statiques, mais c'est une tâche impossible sans passer par un débogueur.

Mais si vous avez simplement besoin d'exécuter votre application API Web sur Mono, il existe une solution très simple. Puisque vous avez converti votre application en OWIN, vous pouvez utiliser la fonction OwinHost.exe (del OwinHost paquet NuGet) au lieu de xsp4.exe pour héberger votre application. Cela a bien fonctionné pour moi avec Mono 5.4.1.7 / OwinHost 3.1.0 / Microsoft.AspNet.WebApi 5.2.3 sur OS X 10.11.6.

Extrait de la Documentation OwinHost :

Lancement de OwinHost :
L'auto-hébergement d'une application OWIN avec OwinHost est aussi simple que d'exécuter OwinHost.exe depuis le répertoire de projet de votre application Web. Le répertoire du projet est défini ici comme le répertoire parent de ./bin qui contient les assemblages de l'application ainsi que l'assemblage du serveur sélectionné. Par défaut, lors de l'exécution de OwinHost.exe sans paramètres supplémentaires, l'hôte tentera de localiser et de charger la classe de démarrage de l'application et le serveur OWIN HttpListener. Après avoir construit le pipeline OWIN à l'aide de la classe de démarrage, il commencera à écouter sur le port 5000. Tous ces comportements par défaut peuvent être facilement modifiés en utilisant les paramètres de OwinHost.exe, comme décrit ci-dessous.

OwinHost Paramètres :
Il existe plusieurs façons de personnaliser le comportement par défaut d'OwinHost. Par exemple, pour sélectionner un autre serveur compatible avec OWIN, exécutez ce qui suit :

OwinHost.exe -s <Custom.Server.Assembly>

La liste complète des options peut être consultée en exécutant :

OwinHost.exe / ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X