【问题标题】:Pass parameters to WCF REST from C#从 C# 将参数传递给 WCF REST
【发布时间】:2014-07-22 10:05:25
【问题描述】:

我必须将参数传递给我创建的 WCF 服务。当我试图将它作为 QueryString 传递时,它抛出了“404 Not found”。

//代码:

string Service = ""http://localhost:58092/Service1.svc/DataService/LoadAllColumnData?Id=1";
WebRequest wreq = WebRequest.Create(Service);

WebResponse wres = wreq.GetResponse();

DataContractSerializer coll = new DataContractSerializer(typeof(DataServiceProxy.GdColumns));                      
var arrProd = coll.ReadObject(wres.GetResponseStream());

//WCF 代码:

[ServiceContract]
public interface IDataService
{             
     [OperationContract]
     [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "LoadAllColumnData/{Id}")]
     IList<GdColumns> LoadAllColumnData(string Id);
}

如何做到这一点?

【问题讨论】:

  • 你的客户是什么? winform 还是 wpf 还是 silverlight?
  • MVC4 模式的 Web 应用程序。
  • 看看这个SO帖子的答案stackoverflow.com/questions/9381633/…
  • 尝试从浏览器调用它。最有可能的问题不是参数,而是 URL 的其余部分。 (在您进行编辑之前,您似乎错过了“http://”以及服务器名称)。
  • @ThorstenDittmar:我使用了http,因为我刚刚删除了http,所以我的帖子不接受。现在我已经更新了问题。

标签: c# wcf rest


【解决方案1】:

在您的 string Service 中,您指定一个查询字符串 LoadAllColumnData?Id=1... 但在您的 UriTemplate = "LoadAllColumnData/{Id}" strong> 您没有查询字符串...您已定义 URL 将包含参数。

如下更改您的服务网址,它应该可以工作...

string Service = ""http://localhost:58092/Service1.svc/DataService/LoadAllColumnData/1";

使用查询字符串...

[WebInvoke(Method = "GET",
    BodyStyle = WebMessageBodyStyle.WrappedRequest,
    UriTemplate = "LoadAllColumnData?Id={Id}")]
IList<GdColumns> LoadAllColumnData(string Id);

使用网址...

[WebInvoke(Method = "GET",
    BodyStyle = WebMessageBodyStyle.WrappedRequest,
    UriTemplate = "LoadAllColumnData/{Id}")]
IList<GdColumns> LoadAllColumnData(string Id);

编辑:正如 Derek 指出的,将 POST 更改为 GET。

【讨论】:

  • 方法属性应该设置为 GET,而不是 POST。 GET 是幂等的,POST 不是。通过这种方法,服务器上没有任何改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2021-01-29
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多