我喜欢ASP.NET MVC控制器的功能,能够添加将URL的某个部分映射到方法参数的路由属性,即:
[Route("there/are/{howManyDucks}/swimming/in/the/{bodyOfWaterType}")]
public string NotifyDucksSwimming(int howManyDucks, string bodyOfWaterType)
{
...
}
Run Code Online (Sandbox Code Playgroud)
是否有一种与ServiceStack相同的方法,并为每种类型的请求跳过DTO类?
这是ServiceStack基于消息的设计中的一个基本概念,即所有服务都接受请求DTO,这是用于定义服务合同的内容.几乎所有ServiceStack的周边功能生态系统都是可能的,因为您的服务合同是在一个单独的干净,impl和无依赖DTO中定义的,这与DMA服务设计WCF,MVC和Web API相反,鼓励您的服务合同与您的服务器耦合方法实现.
ServiceStack中的等价物将是:
//Request DTO
[Route("/there/are/{HowManyDucks}/swimming/in/the/{BodyOfWaterType}")]
public class NotifyDucksSwimming
{
public int HowManyDucks { get; set; }
public string BodyOfWaterType { get; set; }
}
//Implementation
public object Any(NotifyDucksSwimming request)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,填充所有属性/path/info并不是很好的API设计,因此我建议在下面查看以下这些答案,以获取一些API设计示例:
所以我选择代表资源的API端点,可能:
[Route("/ducks/{BodyOfWaterType}")]
public class NotifyDucksSwimming
{
public int HowManyDucks { get; set; }
public string BodyOfWaterType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在ServiceStack中,您只需要指定/path/{info}所有其他参数,可以通过任何其他方式自动填充,例如:QueryString,FormData,Serialized Body,HTTP Param Header Overrides等.
因此,上面的自定义路线将允许您通过以下方式呼叫服务:
此外,如果此API仅用于在Razor页面中执行,在大多数情况下您根本不需要服务,因为ServiceStack允许您直接使用其无仪式页面功能调用Razor页面.
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |