ServiceStack 通过 Razor 模板呈现 RequestBindingException

ServiceStack renders RequestBindingException via Razor template

我有一个简单的 DTO,里面只有一个 Int:

[Route("/cells/{Id}")]
public class CellDetail 
{
    public int Id { get; set; }
}

使用像 /cells/abc 这样的 URL 在 JSON 中给出了 RequestBindingException,但是 HTML 视图仍然通过我的 [=13= 呈现] 文件,显然由于 @Model == null.

而失败

它不应该给出一个 HTML 错误页面吗?它怎么知道 select 是哪个 .cshtml 视图?

Razor 页面可让您访问有关请求的错误信息:

object ModelError { get; }       //The Error Response object
bool IsError { get; }            //ModelError != null
ResponseStatus GetErrorStatus(); //ModelError in ResponseStatus
MvcHtmlString GetErrorMessage(); //Just the Error Message to display

它可以让您呈现相同的页面,但以用户体验友好的方式显示上述错误信息。

您可以添加到页面以仅显示错误消息的便捷快捷方式是

@if (RenderErrorIfAny()) { return; }

这会使页面短路并以 bootstrap 友好的格式显示错误消息,如下所示:

<div id="error-response" class="alert alert-danger">
    <h4>{ErrorCode} : {Message}</h4>
    <pre>{StackTrace}</pre>
</div>

您还可以添加 CSS 来修改错误的外观。