2016-06-17 4 views
0

OWINを使用してホストされているNancyを使用しているウェブサイトがあります。私はパススルーするNOTFOUND要求、私のバンドル.lessファイルやminiprofiler-結果または静的ファイルのようなものとなるよう必要NancyとOWINのカスタムエラーページを表示することはできません

public void Configuration(IAppBuilder app) 
{ 
    app.UseNancy(o => { 
     o.PassThroughWhenStatusCodesAre(
      HttpStatusCode.NotFound, 
      HttpStatusCode.InternalServerError 
      ); 
     o.Bootstrapper = new Bootstrapper(); 
    }); 

    app.UseStageMarker(PipelineStage.MapHandler); 
} 

:私のStartup.csファイルで

次のように私はPassThroughOptionsを定義します私のサイト(robots.txtまたはsitemap.xml)のルートにあります。

また、スタティックファイル(または無制限のバンドル/ミニプロファイラ)と私のモジュールのメソッドに見つからない実際のものとを区別するために、カスタムヘッダをチェックする404コード用のカスタムStatusCodeHandlerもあります。

public void Handle(HttpStatusCode statusCode, NancyContext context) 
{ 
    Log.Warn("Not found: " + context.Request.Url); 
    base.Handle(statusCode, context, "Errors/NotFound"); 
} 

このハンドラは実際にエラーページを表示する必要があります。

protected void Handle(HttpStatusCode statusCode, NancyContext context, string view) 
{ 
    var response = new Negotiator(context) 
     .WithModel(GetErrorModel(context)) 
     .WithStatusCode(statusCode) 
     .WithView(view); 

    context.Response = responseNegotiator.NegotiateResponse(response, context); 
} 

エラーページは表示されません。リクエストは3回処理され、最終的にはデフォルトのIISエラーページが表示されます(httpエラーの場合はerrorMode = "Custom"を使用)。単純に白いページ(httpエラーの場合はexistingResponse = "PassThrough"を使用)。

OWINでナンシーウェブサイトをホスティングしているときにカスタムエラーページと同じように簡単に表示する方法はありますか?

答えて

0

あなたが持っているものはよく見えます。Hosting Nancy with Owin文書を使用しているようです。

(Owinに必要)Startup.cs:ここ

は私のためにどのような作品だ(我々は両方の私はありませんしながら、あなただけの拡張ヘルパーを使用している、異なった設定機能をコード化されたのと同じ。 。。その結果これは私のApp.Webプロジェクトである)

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseNancy(options => 
     { 
      options.Bootstrapper = new BootStrapper(); 
      options.PerformPassThrough = context => context.Response.StatusCode == HttpStatusCode.NotFound; 
     }); 

     app.UseStageMarker(PipelineStage.MapHandler); 
    } 
} 

404ハンドラ:このプロジェクトである場合(ドキュメントを1として、それが自動的によってピックアップされますIStatusCodeHandlerを実装することで、重要ではありません。ナンシーこれは私のApp.WebApiプロジェクトの他のモジュールクラスです)

public class StatusCode404Handler : IStatusCodeHandler 
{ 
    public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context) 
    { 
     return statusCode == HttpStatusCode.NotFound; 
    } 

    public void Handle(HttpStatusCode statusCode, NancyContext context) 
    { 
     var response = new GenericFileResponse("statuspages/404.html", "text/html") 
     { 
      StatusCode = statusCode 
     }; 

     context.Response = response; 
    } 
} 

私App.Webプロジェクトの 'statuspages' フォルダ:これはSO GenericFileReponseかはViewRenderer(How to display my 404 page in Nancy?)を使用しての比較のために投稿

Visual Studio folder structure

チェック。

関連する問題