1

这是我的解决方案的结构(为简洁起见,采用非常简化的格式):

Project.API
    TestRequest.cs
    TestResponse.cs
    ITestService.cs

Project.Web
    /App_Start
        AppHost.cs
    /Services
        TestService.cs
    /Views
        Test.cshtml
    _Layout.cshtml
    Web.config

在哪里:

public interface ITestService
{
    TestResponse Get(TestRequest request);
}

public class TestService : Service, ITestService
{
    public TestResponse Get(TestRequest request)
    {
        return new TestResponse() 
        { 
            // ... set response properties ...
        };
    }
}

如果我用它进行装饰TestService[DefaultView("Test")]那么一切正常,即导航到 URLlocalhost/test会产生由Test.cshtml.

但是,如果我[DefaultView("Test")]从类中删除属性或将其移到Get()方法中,我会得到我的请求/响应的快照,而不是视图的输出。

当 DTO 在不同的项目中定义时,ServiceStack 似乎无法根据响应 DTO 查找视图。还是我错过了什么?

4

2 回答 2

1

我的错,我误解了http://razor.servicestack.net/#unified-stack中的说明

... ServiceStack 的视图选择基于返回的响应或请求模型 (DTO) 的名称。例如,如果您的服务返回 RockstarsResponse,那么我们首先查找与请求 DTO 同名的视图,名为 Rockstars.cshtml,后跟响应 DTO 名称 RockstarsResponse.cshtml(在所有已注册的视图引擎扩展中)。

我认为 Razor Rockstars 示例中的请求 DTO 被调用RockstarsRequest,但它只是Rockstars,所以只要将我的请求 DTO 从重命名为TestRequest简单的Test东西,事情就会立即开始工作。

于 2013-08-06T16:53:21.323 回答
0

不,我不认为 servicestack 基于 DTO 找到视图。至少您需要提供默认视图。这是可以更好地理解它的项目。

剃刀摇滚明星

基本上 servicestack 是 API 框架而不是 Web 开发框架。Viewengine 只是一个插件,如果我们需要一个视图而不是元数据来解释 API 或做某事,它会很有用。

如果您想创建单页应用程序,甚至视图支持也很有用。

如果需要任何进一步的细节,请告诉我。

于 2013-08-06T08:52:16.180 回答