ServiceStack渲染Razor无法查找视图

时间:2017-04-19 23:30:19

标签: servicestack servicestack-razor

这是一个自托管项目。有一个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

razorhttps://db.tt/qeApkAEZGH

AppHost.cs

  Plugins.Add(new RazorFormat() {
        //    ScanRootPath = AppDomain.CurrentDomain.BaseDirectory + "Views"
        } );

1 个答案:

答案 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中的服务网关。