2016-05-11 10 views
2

Ich versuche, ein Projekt auszuführen (refer solution here) mono mit den ASP .net Web API und Owin Komponenten. Das Projekt wird erfolgreich erstellt. Wenn ich jedoch auf den Endpunkt trete, erhalte ich einen Fehler.ASP .Net WebAPI nicht mit Owin arbeitet bei der Verwendung von XSP/Mono gehostet

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 

wurde jedoch CustomersController.Get() Endpunkt korrekt genannt, was bedeutet, dass der Rahmen an den richtigen Controller gehen konnte. Aber etwas BAD passiert nach dem Endpunkt.

Hinweis: Erwähnenswert, dass normale ASP .Net Web API Projekt (ohne OWin) funktioniert gut. Problem ist nur wenn auf OWin Integration.

Ich verwende:

Mono JIT-Compiler Version 4.4.0
Monodevelop 5.10
Siehe packages.config für Versionen von Nuget Pakete
Hier ist die WebApiConfig.cs
Hier ist die CustomerController.cs
Hier die Web.config

Wenn Sie es ausprobieren möchten, bitte und importieren Sie es in monodevelop.

Ich habe versucht, diese Lösung in Windows und es funktionierte dort gut.
Ich bin nicht in der Lage, die Ursache für dieses Verhalten herauszufinden. Wenn mir jemand einige Hinweise geben kann, um das zu beheben, wäre das sehr hilfreich.

+0

Routenkonfiguration für API anzeigen und den betreffenden Controller anzeigen. Laden Sie eine Zip-Datei herunter, um zu versuchen, Ihr Problem zu reproduzieren, riecht nach Malware. (IMHO) – Nkosi

+0

@Nkosi: Hosted den Quellcode auf GitHub für die einfache Anzeige. Außerdem aktualisiert die Frage mit den Zeigern zu den Dateien, nach denen Sie fragen. –

+0

Wir haben uns den Code angeschaut und auf den ersten Blick scheint alles so konfiguriert zu sein, wie es sein sollte. Die Tatsache, dass es unter Windows wie vorgesehen funktioniert, kann bedeuten, dass das Problem spezifisch für Mono ist. Ich werde nach ähnlichen Problemen Ausschau halten. – Nkosi

Antwort

0

Wenn Sie Ihre App unbedingt auf XSP ausführen müssen, habe ich keine Lösung für Sie, sorry. Ich fing an, Monos source code of System.Web.HttpApplication zu lesen, um zu versuchen, zu verstehen, warum die Anforderung durch den statischen Akte Handler verarbeitet würde, aber dieses ist eine unmögliche Aufgabe, ohne mit einem Debugger überzugehen.

Aber wenn Sie nur Ihre Web-API-Anwendung auf Mono ausführen müssen, gibt es eine sehr einfache Lösung. Da Sie Ihre App in OWIN konvertiert haben, können Sie OwinHost.exe (aus dem NuGet-Paket OwinHost) anstelle von xsp4.exe zum Hosten Ihrer App verwenden. Dies funktionierte für mich mit Mono 5.4.1.7/OwinHost 3.1.0/Microsoft.AspNet.WebApi 5.2.3 unter OS X 10.11.6.

Auszug aus den OwinHost documentation:

starten OwinHost:
Self-Hosting eine OWIN Anwendung mit OwinHost so einfach wie OwinHost.exe aus Ihrer Webanwendung Projektverzeichnis ausgeführt wird. Das Projektverzeichnis ist hier als das übergeordnete Verzeichnis von ./bin definiert, das die Assemblys der Anwendung sowie die ausgewählte Server-Assembly enthält. Wenn OwinHost.exe ohne zusätzliche Parameter ausgeführt wird, versucht der Host standardmäßig, die Startklasse der Anwendung und den OWIN HttpListener-Server zu suchen und zu laden. Nach dem Konstruieren der OWIN-Pipeline mit Hilfe der Startup-Klasse beginnt sie dann, Port 5000 zu überwachen. Alle diese Standardverhaltensweisen können leicht mit Parametern wie OwinHost.exe geändert werden, wie unten beschrieben.

OwinHost Parameter:
Es gibt eine Vielzahl von Möglichkeiten, das Standardverhalten von OwinHost anzupassen. Zum Beispiel eines alternativen OWIN-kompatibeler Server zu wählen, führen Sie die folgenden Schritte aus:

OwinHost.exe es < Custom.Server.Assembly>

Die vollständige Liste der Optionen kann durch Ausführen zu sehen:

OwinHost.exe /?

Verwandte Themen