2015-10-20 50 views
1

我已閱讀Error Handling,ServiceStack_Succinctly.pdf,ServiceStack 4 Cookbook和各種SO問題,但仍無法獲得以下工作。如何在ServiceStack中顯示自定義錯誤頁面

我想要一種方法來顯示我自己的「漂亮」錯誤頁面,以查看任何服務中拋出的異常。如果拋出任何異常,我想讓用戶訪問一個友好的頁面,顯示錯誤消息,但沒有任何「單純的凡人」無法理解的信息。

理想我想這一點的同時保持對我的服務請求的響應類型,即

public object Get(GetOrder request) 
{ 
    return new GetOrderResponse() 
      { 
       ... 
      } 
} 

而是

public GetOrderResponse Get(GetOrder request) 
{ 
    return new GetOrderResponse() 
      { 
       ... 
      } 
} 

我會很感激如何得到這個工作的指導或者這是完成的一個例子。

謝謝。

回答

1

查看Fallback Error Pages的選項,例如您可以顯示一個/oops.cshtml剃刀頁:

public override void Configure(Container container) 
{ 
    Plugins.Add(new RazorFormat()); //Register ServiceStack.Razor Plugin 

    this.GlobalHtmlErrorHttpHandler = new RazorHandler("/oops"), 
} 

或爲更細粒度的控制,使用IAppHost.CustomHttpHandlers用於指定自定義HttpHandlers的特定錯誤狀態碼使用,如:

public override void Configure(Container container) 
{ 
    this.CustomHttpHandlers[HttpStatusCode.NotFound] = 
     new RazorHandler("/notfound"); 
    this.CustomHttpHandlers[HttpStatusCode.Unauthorized] = 
     new RazorHandler("/login"); 
} 
+0

我已經試過這。我從來沒有看到我的「錯誤」頁面。它被稱爲Error.cshtml,它位於我的服務的根目錄中,而不是在Views文件夾中。如果我在響應DTO上輸入「public ResponseStatus ResponseStatus {get; set;}」,則按預期顯示「Order」頁面,並按照文檔 - 我已添加代碼以檢查ResponseStatus。如果我刪除了屬性,但是我得到了標準的SS json頁面,而不是我期望的錯誤頁面。 –

+0

@GerhardWessels看起來好像它沒有回落到服務異常中的Global Html ErrorHandler,它現在應該[從此提交](https://github.com/ServiceStack/ServiceStack/commit/b2f24c0cdf2a0e2bd5fc5e09f8a184566f046475)可用從v4.0.47現在[MyGet上可用](https://github.com/ServiceStack/ServiceStack/wiki/MyGet)。 – mythz

相關問題