我在我的智慧结束。我试图通过FastCGI在Mono下运行ASP.NET MVC 3网站,而Cassette的HTTP处理程序将无法正确注册。该网站为http://www.tychaia.com/。
奇怪的是:
xsp4
下运行时,它可以正常工作。fastcgi-mono-server4
下运行时,它无法正常工作。我尝试过的事情:
这是特殊的Web.config条目:
<add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
(https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Web.config#L47)
据我所知,我有两个导致此问题的问题:
cassette.axd
URL不匹配,即使它在https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20明确指定(并且它在普通的旧XSP4下工作)。当我为字符串“cassette.axd”添加一个显式的IgnoreRoute(通过做routes.IgnoreRoute("cassette.axd");
)时,它会开始传递给处理程序,除了:cassette.axd
,即使这样处理程序似乎没有任何路径信息。<add path="cassette.axd/*" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
时,这些条目也开始由处理程序处理,但它不会像通常那样在该URL处响应;您只需获取默认值,就好像没有其他URL参数(可能是HTTP处理程序路径匹配正在使用它们)。目前FastCGI的设置方式是:
同样,在XSP4下不会发生此问题,只有 在FastCGI下发生。虽然我可以将此代理反向代理到XSP4实例,但出于性能原因,我对此犹豫不决。
还有什么我可以在这里找不到的吗?
编辑:以下是一些应该有效的网址。如您所见,他们正在使用StaticFileHandler而不是Cassette HTTP处理程序:
您可以看到,明确指定了IgnoreRoute,cassette.axd
路径会映射,但只有该路径:
如果你在它的末尾放一个斜杠,它就不起作用:
编辑2 :我已将网站更新为仅链接到/Content/main.css
文件,以便在此问题排序时网站正确显示;如果您在浏览器中检查网络请求,您将看到对Cassette捆绑包的失败请求。
答案 0 :(得分:3)
我已经在Mono bug跟踪器上提交了一个错误,希望能够找到解决这个问题的原因:
https://bugzilla.xamarin.com/show_bug.cgi?id=12190
更新:我找到了问题的原因。在OpenSUSE下,mono和XSP是单独打包的。即使我将Mono升级到3.0.10,XSP / FastCGI仍然保持在版本2.10.2.0。当我将XSP / FastCGI软件包升级到2.11.0.0时,问题就消失了。