servicestack,Rest,Facebook Graph Api,Asp.net Web Api,servicestack" /> servicestack,Rest,Facebook Graph Api,Asp.net Web Api,servicestack" />

如何在c#中构建部分项RESTful API?

如何在c#中构建部分项RESTful API?,rest,facebook-graph-api,asp.net-web-api,servicestack,Rest,Facebook Graph Api,Asp.net Web Api,servicestack,似乎大多数WebAPI示例都返回了一些模型(域模型或特定视图模型) 在使用域模型时,我们实际上从ajax调用请求视图中所需的数据,然后使用JavaScript构建视图模型(假设我们正在构建web应用程序) 我尝试为每个页面(视图)使用不同的视图模型,这样可以减少网络占用并只返回需要的字段。但是在ApiController中,我有太多的GET方法。我们不可能预测未来的需求并构建一个返回各种视图模型的API 我想模仿Facebook Graph API并构建一个uri,如: http://... a

似乎大多数WebAPI示例都返回了一些模型(域模型或特定视图模型)

在使用域模型时,我们实际上从ajax调用请求视图中所需的数据,然后使用JavaScript构建视图模型(假设我们正在构建web应用程序)

我尝试为每个页面(视图)使用不同的视图模型,这样可以减少网络占用并只返回需要的字段。但是在ApiController中,我有太多的GET方法。我们不可能预测未来的需求并构建一个返回各种视图模型的API

我想模仿Facebook Graph API并构建一个uri,如:

http://... api/games/333?fields=id, name, price, imageUrl
我们的用户应该能够只使用这几个字段更新记录

详细说明可在谷歌代码博客条目中找到:

建议这超出了ASP.NET WebAPI当前的能力。
ServiceStack
或其他软件包能帮助我们实现目标吗?

试试这个项目:部分回答问题

ServiceStack.PartialResponse.ServiceModel

谷歌风格部分 ServiceStack.Net的响应。目前只有以下内容 支持以下类型:

  • 应用程序/json
  • 应用程序/jsv
  • 文本/html
  • 当前不支持application/xml
我想将其实现为ServiceStack IPlugin,但无法实现 为了弄清楚如何访问我需要的响应DTO 我的方法。目前,这是作为IRequestContext实现的 分机

提供字段选择器

可以使用标题或查询字符串传递字段选择器。通过 默认字段选择器由两个字段组合而成。重复字段 选择器被减少。字段选择器将应用于中的所有条目 如果选择器引用列表,则为列表


在ServiceStack中实现部分更新有几个选项。请参阅,了解使用具有可空值的请求DTO、ServiceStack中的
PopulateWithNondDefaultValues
和类似扩展方法的方法,以获取补丁样式的请求,其中客户端可以发送请求正文中的任何字段子集。如果请求正文中不存在给定字段,则不会更新域对象的属性

如果确实需要使用查询字符串来指定应更新的字段子集,则仍然可以使用上述方法,但添加一些代码,首先将传入请求DTO对象中未在查询字符串中命名的任何值置空。然后,您可以再次使用
PopulateWithNonDefaultValues
将剩余的值复制到域对象

另外,请评论与我刚才给出的建议密切相关的帖子的另一部分:

在使用域模型时,我们实际上从ajax调用中请求的数据超过了视图中所需的数据

基于消息的设计在这里很有用:将请求/响应消息建模为单独的DTO类,而不是重用和公开内部域模型对象。在这些好处中,您将消除在请求/响应模型中暴露不必要字段的问题。基于消息的设计是推动ServiceStack实现的核心概念之一。不过,您可以通过WebAPI或MVC获得类似的结果。我强烈推荐阅读讨论此设计如何在ServiceStack中工作的书籍。

您可以使用,请看。 它可以使用键:$select,$expand,$filter进行搜索,选择一些文件。
最重要的是,ASP.NET WEB API有一个SDK来支持此功能。

感谢您的回复。但是这是一个成熟的产品吗?目前只有1个参与者和51个提交。现在有教程或示例代码吗?这不是我的项目,所以我不能给你一个明确的答案。我建议在github上记录一个问题,并附上您的问题。谢谢!这个解决方案看起来最接近我们的需要。这可能就是WebAPI不包含
PartialResponse
函数的原因。我试图搜索您提到的WebAPI SDK,但找不到。你能帮我们发个链接吗?但我确实找到了一些我可以研究的例子。[感谢您为我指明了一个全新的方向。很高兴能帮助您。您可以在Nuget上获得SDK,搜索
oData
。这是oData的最新版本,以及他们的at codeplex。我开发了一个使用oData的站点,at github。