LightNodeという、OWINで動くサーバーAPIを構築するのに適したフレームワークがあります。とにかくシンプルに構築できて、動作も高速というところに特化して作られているそうです。仕事でもしかしたら使うかもしれないので、ちょっと触ってみることにしました。

とりあえず、右も左もわからないので、Nancy からLightNode へ移行のススメを参考にさせてもらって、Hello Worldしてから、swaggerで動作確認できるところを目標にして、まずはサンプルソースを動かしたり、LightNodeの説明を読んだりして何となくわかった感じになったので、サラの状態から書いてみたら……APIについてはちゃんとできるんですが、swaggerがちゃんと表示されない。
ちゃんとレスポンスは来るんですが、HTMLがそのまま表示されて、swaggerのページとして表示されないのです。
参考ページのサンプルではちゃんと動くのを見てるんですが、自分で作ったものはだめ。参照しているコンポーネントとかも特に問題ないし、なによりHelloWorld自体はちゃんとできてるのでLightNode.Swaggerになにかありそう……

と言うことで、LightNodeのソースをあたってみましたら、最新の1.6.3でswaggerのUIが更新されていました。参考ページのソースはよく見ると1.6.0を使っているようです。

試しに自分のソースのLightNodeを1.6.0に落としてやってみると、これがちゃんと表示されちゃう。1.6.0と1.6.3の何が違うのかとdiffって見たりしてたんですが、なんかそれっぽいところが見当たらず困っていたんですが、1.6.0に1.6.3の変更点を部分部分マージしながら確認していたら、なんか1.6.3のソースでもちゃんと表示されるようになってしまいました。

だいぶ途方に暮れてしまったので、2,3時間放置して他のことをしていたらハッと気がつきました。
HTMLファイルがBOM付きで保存されているとこうなることがあるということを……

確認したら付いてました、BOMが。LightNode.Swagger/SwaggerUI/index.htmlに。
あらためて、1.6.3のソースでBOMなしにしたら動きました。

1.6.0にマージしていって動いたのはファイル丸ごとマージしなかったからBOMがない状態だったんですね。
こればっかりは、コードを差分で見てもわかりませんし気がつくのは難しいですよね。

なんかどうやってこれを知らせたら良いのかわからなかったので、githubのissuesに登録しておきました。
英語かけないので、タイトルだけ英語で……