【问题标题】:Order of API endpoint declaration in Nancy Web FrameworkNancy Web 框架中 API 端点声明的顺序
【发布时间】:2012-09-26 16:18:04
【问题描述】:

我正在使用 NancyFX 来托管我们的网站 REST API。我们在数据库中有用户表,我想更新:

1) 完整用户更新 - 更新所有字段 2) 部分用户更新 - 仅更新单个字段

我们使用的是 Nancy 0.7 - 所以目前它不支持 PATCH - 我只能使用 PUT

我已经定义了我的 API,比如

PUT ["/user/{username}"] - for complete update using passed-in user object value
PUT ["/user/{username}/id/{newid}"] - for updating user id only

但是,当我调用第二个 API(仅更新 id)时 - 它永远不会被 Nancy 困住 - 并且 Nancy 总是调用该方法来完全更新用户,即 PUT ["/user/{username}"]

不管我声明 API 的顺序是什么,Nancy 总是只调用完整的用户更新端点。

需要帮助,以便我可以通过客户端应用程序的 PUT 正确使用这两个 API。

【问题讨论】:

    标签: rest post put nancy


    【解决方案1】:

    一般来说,对 URI 的任何动态数据组件进行 UrlEncode 是个好主意。

    所以,在你的情况下:

    PUT - /user/xyz@yahoo.com/id/123
    

    会变成

    PUT - /user/xyz%40yahoo.com/id/123 
    

    Nancy 将负责为您解码该值,因此当您从 parameters 动态对象中提取它时,它将返回到 xyz@yahoo.com

    【讨论】:

    • '@' 字符很好 - 但 Nancy 在解码 '+' 字符时遇到问题 - 即使我使用 URL 编码 - Nancy 将其解码为 '空格'
    • 啊,这不是 Nancy 的错,加号 (+) 字符是空格的 urlencode 字符,如果数据是从表单发送的,否则是更常见的 %20。因此,如果您的数据有优势,那么 Nancy 会正确地将其解码为空格。尝试在 Nancy 处理程序中对您的数据进行双重编码和单一解码,或者使用 javascript 的 encodeURIcomponent() 进行编码。请参阅URL encoding the space character: + or %20? 了解更多信息。
    【解决方案2】:

    发现问题 - 这与用户名中的“@”字符有关 - 特殊字符。

    如果用户名包含“@”字符,那么 Nancy 永远不会匹配 PUT - /user/xyz@yahoo.com/id/123 到 PUT ["/user/{username}/id/{newid}"]

    它总是匹配路由 PUT - /user/xyz@yahoo.com/id/123 到 PUT ["/user/{username}"]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多