我正在尝试使用具有ASP .net Web APIOwin组件的mono运行一个项目( refer solution here )。该项目已成功构建。但是,当我点击端点http://127.0.0.1:6666/customers时,出现以下错误。

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

但是,正确调用了CustomersController.Get()端点,这意味着框架能够转到正确的 Controller 。但是,某些错误发生在端点之外。

注意:值得一提的是,正常的ASP .Net Web API项目(不带OWin)可以正常工作。集成OWin时,问题是

我在用:

Mono JIT编译器版本4.4.0
Monodevelop 5.10
请参阅packages.config以获取Nuget软件包的版本
这是WebApiConfig.cs
这是CustomerController.cs
这是Web.config

如果您想尝试一下,请 refer/pull the code 并将其导入monodevelop中。

我尝试在Windows中运行此解决方案,并且在该处工作正常。
我无法找出造成这种现象的原因。如果有人可以为我提供一些解决方案,那将非常有帮助。

最佳答案

如果您绝对需要在XSP上运行您的应用程序,那么抱歉,我没有适合您的解决方案。我开始阅读Mono的source code of System.Web.HttpApplication,试图了解为什么静态文件处理程序会处理该请求,但这是一项不可能完成的任务,而无需调试器的帮助。

但是,如果您只需要在Mono上运行Web API应用程序,则有一个非常简单的解决方案。由于您已将应用程序转换为OWIN,因此可以使用OwinHost.exe(来自OwinHost NuGet包)代替xsp4.exe来托管您的应用程序。在OS X 10.11.6上使用Mono 5.4.1.7/OwinHost 3.1.0 / Microsoft.AspNet.WebApi 5.2.3时,这对我来说效果很好。

摘自OwinHost documentation:

启动OwinHost:
使用OwinHost自托管OWIN应用程序就像从Web应用程序的项目目录中运行OwinHost.exe一样简单。项目目录在此定义为./bin的父目录,其中包含应用程序的程序集以及所选的服务器程序集。默认情况下,在不带其他参数的情况下运行OwinHost.exe时,主机将尝试查找并加载应用程序的启动类和OWIN HttpListener服务器。在启动类的帮助下构造了OWIN管道之后,它将开始在端口5000上侦听。所有这些默认行为都可以使用OwinHost.exe的参数轻松地进行更改,如下所述。

OwinHost参数:
有多种方法可以自定义OwinHost的默认行为。例如,要选择备用的OWIN兼容服务器,请运行以下命令:

OwinHost.exe -s

可以通过运行以下命令查看选项的完整列表:

OwinHost.exe /?

09-27 11:37