ApiControllers 和 Razor 视图

Posted

技术标签:

【中文标题】ApiControllers 和 Razor 视图【英文标题】:ApiControllers and Razor views 【发布时间】:2013-07-01 16:36:32 【问题描述】:

我的计划是创建一些动态加载的程序集,它们可以提供一些 Web 界面。

我决定在这些程序集中放置一些 WebApi 控制器,其中一些控制器可以使用内联 Razor 模板(通过自定义 MediaTypeFormatter)提供 html 视图。 到目前为止,它与内联 Razor 模板配合得非常好:

var myModel = new Name:"World";
var template = "Hello, @Model.Name!";
return Razor.Parse(template, myModel);

但我遇到的问题是我不知道如何使用/注册位于我的程序集中的外部 Razor 视图(.cshtml 文件)。

到目前为止,我尝试了以下方法:

var template = Razor.Resolve("MyView.cshtml", myModel);
return template.Run(new ExecuteContext());

但是我的template变量是null,我猜是找不到MyView.cshtml,没有注册或者没有正确引用。

【问题讨论】:

您是否在 Visual Studio 中为您的 cshtml 文件设置了构建操作:“嵌入式资源”?您是否使用TemplateService 配置了Razor.SetTemplateService,它可以从正确的程序集中解析您的模板? @nemesv,不,我没有。您能否将我推向正确的方向如何实现解析我的模板的TemplateService?谢谢。 这就是我的做法github.com/darrelmiller/HypermediaApiSite/blob/master/… 谢谢,你们中的任何人都想让您的评论成为答案,以便我接受吗?问题似乎已经解决了,我只需要弄清楚如何在加载每个程序集时为它们注册解析器。 【参考方案1】:

我们正在使用 Razor Generator - VS 的自定义工具 (http://visualstudiogallery.msdn.microsoft.com/1f6ec6ff-e89b-4c47-8e79-d2d68df894ec?SRC=VSIDE)。

Razor 视图在设计时进行预编译,并作为 C# 类内置到程序集中。无需包含 .cshtml 文件即可作为嵌入式资源进行项目。

【讨论】:

以上是关于ApiControllers 和 Razor 视图的主要内容,如果未能解决你的问题,请参考以下文章

Razor视图引擎

Razor视图中的@:和语法

MVC3 Razor - 模型和视图

覆盖 asp.net core razor 页面中的 razor 视图

Swashbuckle 5 找不到我的 ApiControllers

ASP.NET MVC 3、Razor 视图和可移植区域