wcf的rest中, WebInvoke(UriTemplate = "/Del/{data}" 可以使用复杂数据类型吗?

勇哥注:

这个问题比较常见。它是在一个rest函数中,想使用多个参数,或者类似Tuple<>这样的复合类型,怎么弄?

一般的做法是使用查询字符串,或者是单个包装类型,例如类。


在WCF REST服务中,WebInvoke 或 WebGet 属性的 UriTemplate 参数不支持直接将 Tuple<string, int, int> 或任何复杂类型作为路径参数(即URL中的 {data} 部分)。UriTemplate 中的路径参数(如 {data})通常被期望为简单的类型,如字符串、整数等,这些类型可以直接从URL中解析出来。

当你尝试将 Tuple<string, int, int> 作为路径参数时,WCF 框架无法直接理解如何从URL中提取这样一个复杂类型,因为它期望的是一个简单的值。

要解决这个问题,你有几个选项:

  1. 使用查询字符串
    将 Tuple 中的数据作为查询字符串参数传递,而不是路径参数。

[WebInvoke(Method = "DELETE", UriTemplate = "/Del?param1={param1}&param2={param2}&param3={param3}")]  
public void DeleteMethod(string param1, int param2, int param3)  
{  
    // 实现删除逻辑  
}

  调用这个服务时,URL可能是这样的:/Del?param1=value1&param2=123&param3=456

  1. 使用单个包装类型
    如果你需要这些数据作为请求体的一部分(尽管你最初使用的是路径参数),你可以创建一个包装类型,并将其作为请求体传递。然而,这通常与 DELETE 请求不符,因为 DELETE 请求通常不包含请求体(尽管技术上可以,但不符合REST的最佳实践)。

public class DeleteRequest  
{  
    public string Param1 { get; set; }  
    public int Param2 { get; set; }  
    public int Param3 { get; set; }  
}  

// 注意:通常不推荐在DELETE请求中包含请求体  
[WebInvoke(Method = "DELETE", UriTemplate = "/Del", BodyStyle = WebMessageBodyStyle.Bare)]  
public void DeleteMethod(DeleteRequest request)  
{  
    // 实现删除逻辑  
}

但是,请注意,虽然你可以这样做,但将请求体用于 DELETE 请求并不是RESTful API设计的标准做法。

  1. 重新设计URL结构
    如果可能的话,重新设计你的URL结构,以便它只包含简单的路径参数或不需要额外参数的路径。

[WebInvoke(Method = "DELETE", UriTemplate = "/Del/{id}")]  
public void DeleteMethod(int id)  
{  
    // 使用id来查找和删除相关记录  
    // 如果需要额外的参数,考虑从数据库或其他存储中检索它们  
}

使用POST请求
如果你的操作需要复杂的参数,并且这些参数不适合放在URL中,考虑使用 POST 请求而不是 DELETE 请求,并将这些参数放在请求体中。

[WebInvoke(Method = "POST", UriTemplate = "/Del", BodyStyle = WebMessageBodyStyle.Bare)]  
public void DeleteWithPost(DeleteRequest request)  
{  
    // 实现删除逻辑  
}

但是,请注意,使用 POST 请求进行删除操作可能不符合RESTful API的直觉性,因为 POST 通常用于创建新资源。在这种情况下,你可能需要仔细考虑你的API设计,以确保它符合你的业务逻辑和RESTful原则。


另注:

不支持类型指定,如:/Del/{id:int}

这些高级玩法只能使用asp.net mvc的webapi了。



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-07-30 18:59:08 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864