- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道 ServiceStack 注册路由的最佳实践是什么。
我读过一些在 AppHost 中执行此操作更好的地方,因为它将路由定义与 DTO 分离。但我看到的大多数示例都使用装饰器模式。
那么哪个更好呢?是否有任何理由使用其中一种而不是另一种?
最佳答案
用路由属性装饰 DTO 已成为最佳实践。 SerivceStack's "new API"的发布已经指出了这样做的许多好处,但最重要的是它促进了更“简洁、类型化、端到端客户端 API”。
除了使用 IReturn
之一标记您的 DTO 之外,还可以使用路由属性, IReturn<T>
或IReturnVoid
接口(interface),您可以使用 ServiceStack 现在提供的全部功能。
优点
对于给定的 DTO,您可以使用 ToUrl 扩展方法通过发现属性来生成路由。
[Route("/route/{Id}/{Name}")]
public class ExampleDTO : IReturn
{
public int Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
var url = new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" }.ToUrl("GET");
// generates /route/1/Test?value=Foo
服务客户端将在幕后完成所有这些工作。您的消费代码可以变成:
ExampleDTO response = new JsonServiceClient(“http://api.com/)
.Get(new ExampleDTO() { Id = 1, Name = "Test", Value = "Foo" });
解耦怎么样?我认为没有必要将 DTO 与路由分离。我希望我的开发人员同事知道,在不更改路由的情况下不应更改请求。我见过很多运行时错误,因为我在更改 DTO 后忘记更新 AppHost 中的路由。
关于asp.net - servicestack使用RouteAttribute在AppHost VS装饰器中注册路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18011026/
我在尝试使用 this.SessionAs 时遇到以下异常在我的一项服务中: "AppHost does not support accessing the current Request via a
我一直在评估 ServiceStack,到目前为止,我几乎被说服了 - 但我有一个要求,我认为将成为一个交易破坏者。 我基本上需要多个 AppHost 派生实例。第一个很好地启动,但其余的失败,因为“
我对如何使服务程序集可插入(从配置文件中读取它们)到 ServiceStack 有疑问。 我想从配置文件注册我的服务程序集,而不是在 AppHost 中硬编码它们。像这样的构造函数: public a
我想在不使用 MVC 的情况下将 ServiceStack 用作纯 AppHost 实现。我想用它来驱动单页应用程序。 为 SPA 的单个 HTML shell 页面提供服务非常简单,我发现了很多这样
我想知道 ServiceStack 注册路由的最佳实践是什么。 在 AppHost 中使用 Routes.Add 定义路由 在 DTO 上使用 RouteAttiribute 装饰器定义路由 我读过一
看起来只有请求 dto 和异常对象可以在 AppHost 的 ServiceExceptionHandler 中使用。我需要访问 IHttpRequest 对象,以便我可以访问 Items 集合并获取
我正在尝试在 C# 代码中设置 IP 地址和域限制,我正在关注 this文章,但它给了我无法识别的位置错误。 Error: Unrecognized configuration path 'MACHI
我们有一个实用程序,可以在安装到客户服务器上时自动设置 ASP.NET Web 应用程序。此实用程序通常会在 applicationHost.config 中为新应用的位置路径添加许多配置。我们使用
我编写了一个使用 gmail 发送邮件的程序,如果我单独执行它,它工作正常,但是当我与 google appengine 集成时,它给我以下错误, Exception in thread "main"
我是一名优秀的程序员,十分优秀!