这是一个自托管项目。有一个Views\Member.cshtml
文件设置为始终作为内容进行复制。运行时的以下内容为razorView
返回null。我似乎在这里遗漏了一些东西。
var razorView = razor.GetViewPage("Member"); //e.g. /Views/Member.cshtml
var html = razor.RenderToHtml(razorView, em);
Console.WriteLine(html);
此外我尝试了这个并返回file not found
,尽管文件在那里:
var html = razor.RenderToHtml(AppDomain.CurrentDomain.BaseDirectory +
"Views\\" + "Member.cshtml", em);
另外,有没有办法让服务网关返回渲染的剃刀?
Member.cshtml
存在:https://db.tt/xuOSAjEj31
razor
:https://db.tt/qeApkAEZGH
AppHost.cs
:
Plugins.Add(new RazorFormat() {
// ScanRootPath = AppDomain.CurrentDomain.BaseDirectory + "Views"
} );
答案 0 :(得分:2)
我已经使用ServiceStackVS中的 ServiceStack Self Host with Razor 项目对此进行了测试,将每个.cshtml
更改为复制更新,更改后AppHost.Configure()
只是:
public override void Configure(Container container)
{
this.Plugins.Add(new RazorFormat());
}
然后在下面添加了HelloView
服务:
[Route("/views/hello/{Name}")]
public class HelloView
{
public string Name { get; set; }
}
public class MyServices : Service
{
public object Any(Hello request)
{
return new HelloResponse { Result = "Hello, {0}!".Fmt(request.Name) };
}
public object Any(HelloView request)
{
var razor = HostContext.GetPlugin<RazorFormat>();
var helloView = razor.GetViewPage("Hello");
var response = Any(request.ConvertTo<Hello>());
var html = razor.RenderToHtml(helloView, response);
return html;
}
}
在razor.GetViewPage("Hello")
返回Views\Hello.cshtml
中的视图并返回生成的html的情况下,其工作正常。
另外,有没有办法让服务网关返回渲染的剃刀?
Service Gateway用于调用返回Typed Response DTO的服务,而不是生成的html视图。您可以使用base.Gateway
访问Razor Views中的服务网关。