尝试实现一个系统,开发人员可以照常创建一个 cshtml Razor 视图(例如,一系列 @Html.EditorFor(t=>t.MyProperty) 调用,其中散布着标记等),但基于某些标题请求不同的响应。
举个例子:
标准用户通过在浏览器中输入路线导航到操作,获得标准的、预期的 HTML 结果。
非人类系统访问与用户相同的 URL,但包含一个 HTTP 标头来标识自己,获取自定义输出。在这种情况下,自定义输出是使用 EditorFor 调用定义的字段的 JSON 表示。
通过创建一个名为 CustomEditorFor 的新帮助程序,我已经取得了相当大的进展逗号分隔并包装为 JSON 集合,但助手可用的信息似乎没有给我任何关于它是视图中的第一个/最后一个等的上下文。
我正在研究我需要覆盖的地方以相对干净地执行此操作。到目前为止,看起来我需要 IView 的自定义实现(或更可能是 RazorView 的子类化)和 ViewEngine 的自定义实现(我们已经将 RazorViewEngine 子类化以处理路径等,所以这不是问题),它看起来像,为了获得绝对理想的结果,我可能还需要创建一个 WebViewPage 或 WebPageBase 的子类,以便能够影响响应中显示或未显示的内容等。
我在这里确实有一些限制:
- 我不能为此使用单独的视图文件
- 由于 (1),我无法将 JSON 的位放入视图文件中。默认情况下,它需要正确呈现为 HTML,并且仅呈现为存在正确标头的 JSON
有没有人在这些方面做过任何事情?我在正确的道路上吗?有没有更简单的方法来做到这一点?感觉令人难以置信的过度设计,但我目前看不到任何其他方法可以干净地做到这一点。