3

这是一个自托管项目。有一个Views\Member.cshtml文件设置为始终作为内容复制。以下 when run 为razorView. 我似乎在这里遗漏了一些东西。

    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"
        } );
4

1 回答 1

2

在将每个更改为Copy if newer之后,我已经在 ServiceStackVS 中使用带有 Razor 项目的 ServiceStack Self Host 对此进行了测试更改为:.cshtmlAppHost.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。

另外,有没有办法让服务网关返回渲染的剃须刀?

服务网关用于调用返回类型化响应 DTO 的服务,而不是生成的 html 视图。您可以用于base.Gateway访问 Razor 视图中的服务网关。

于 2017-04-20T00:01:07.900 回答