以下是我的解决方案的结构(为简洁起见,采用严格简化的格式):
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")]
,那么一切正常,即导航到网址localhost/test
会产生由Test.cshtml
呈现的预期输出。
但是,如果我从类中删除[DefaultView("Test")]
属性或将其移至Get()
方法,我会获得请求/响应的快照,而不是视图的输出。
当在另一个项目中定义DTO时,ServiceStack似乎无法根据响应DTO查找视图。或者我错过了什么?
答案 0 :(得分:1)
我的不好,我误解了http://razor.servicestack.net/#unified-stack
中的说明... ServiceStack的视图选择基于响应的名称 或返回请求模型(DTO)。例如。如果您的服务返回 RockstarsResponse然后我们首先寻找一个同名的视图 Request DTO名为Rockstars.cshtml,后跟Response DTO 名为RockstarsResponse.cshtml(在所有注册的视图引擎中) 扩展)。
我认为Razor Rockstars示例中的请求DTO被称为RockstarsRequest
,但它只是Rockstars
,所以只要将我的请求DTO从TestRequest
重命名为普通Test
事情立即开始起作用。
答案 1 :(得分:0)
没有。我不认为servicestack基于DTO找到视图。至少你需要提供默认视图。这是一个可以更好地理解它的项目。
基本上,servicestack是API框架,而不是Web开发框架。 Viewengine只是一个插件,如果我们需要一个视图而不是元数据来解释API或做某事,它可能很有用。
如果您想创建单页面应用程序,甚至视图支持也很有用。
如果需要进一步的详细信息,请告诉我。