C# 无法调用RESTful web服务方法

C# 无法调用RESTful web服务方法,c#,web-services,rest,C#,Web Services,Rest,我正试图深入到RESTful web服务领域,并从以下模板开始: [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public class Test { // TODO:

我正试图深入到RESTful web服务领域,并从以下模板开始:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Test {
   // TODO: Implement the collection resource that will contain the SampleItem instances

   [WebGet(UriTemplate = ""), OperationContract]
   public List<SampleItem> GetCollection() {
     // TODO: Replace the current implementation to return a collection of SampleItem instances
     return new List<SampleItem>() {new SampleItem() {Id = 1, StringValue = "Hello"}};
   }

   [WebInvoke(UriTemplate = "", Method = "POST"), OperationContract]
   public SampleItem Create(SampleItem instance) {
     // TODO: Add the new instance of SampleItem to the collection
      throw new NotImplementedException();
   }

   [WebGet(UriTemplate = "{id}"), OperationContract]
   public SampleItem Get(string id) {
      // TODO: Return the instance of SampleItem with the given id
      throw new NotImplementedException();
   }

   [WebInvoke(UriTemplate = "{id}", Method = "PUT"), OperationContract]
   public SampleItem Update(string id, SampleItem instance) {
      return new SampleItem {
               Id = 99,
               StringValue = "Done"
             };
   }

   [WebInvoke(UriTemplate = "{id}", Method = "DELETE"), OperationContract]
   public void Delete(string id) {
      // TODO: Remove the instance of SampleItem with the given id from the collection
      throw new NotImplementedException();
   }
}
[服务合同]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
公开课考试{
//TODO:实现将包含SampleItem实例的集合资源
[WebGet(UriTemplate=“”),运营合同]
公共列表GetCollection(){
//TODO:替换当前实现以返回SampleItem实例的集合
返回new List(){new SampleItem(){Id=1,StringValue=“Hello”};
}
[WebInvoke(UriTemplate=”“,Method=“POST”),OperationContract]
公共SampleItem创建(SampleItem实例){
//TODO:将SampleItem的新实例添加到集合中
抛出新的NotImplementedException();
}
[WebGet(UriTemplate=“{id}”),操作合同]
公共SampleItem获取(字符串id){
//TODO:返回具有给定id的SampleItem实例
抛出新的NotImplementedException();
}
[WebInvoke(UriTemplate=“{id}”,Method=“PUT”),OperationContract]
公共SampleItem更新(字符串id,SampleItem实例){
返回新样本项{
Id=99,
StringValue=“完成”
};
}
[WebInvoke(UriTemplate=“{id}”,Method=“DELETE”),OperationContract]
公共无效删除(字符串id){
//TODO:从集合中删除具有给定id的SampleItem实例
抛出新的NotImplementedException();
}
}
我可以执行GET操作,但无法执行PUT、POST或DELETE请求

有人能告诉我如何执行这些操作以及如何创建正确的URL吗

致意


据我所知,WebInvoke目前只支持GET和POST。我使用POST执行PUT和DELETE操作。

编辑-根据您的回答更新:

URL为“”
postData是要作为参数传递的数据

在您的情况下,看起来您正在尝试传递一个类型。记住这是在一个URL中发布的。将类型的值分解为参数

例如:“”

您需要更改操作约定以接受int和字符串,而不是SampleItem

    [WebInvoke(UriTemplate = "Create?id={x}&stringValue={y}", Method = "POST"), OperationContract]
    public SampleItem Create(int id, string stringValue)
    {
       // Create and return the Sample Item. 
    }
让我知道进展如何

帕特里克

嗨,Alex,这是我用来发布到Restful服务的东西

// Create the request
WebRequest request; 
request = WebRequest.Create(url + postData); 
request.Method = "POST";  

byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = byteArray.Length;

// Get the request stream. 
Stream dataStream = request.GetRequestStream(); 

// Write the data to the request stream. 
dataStream.Write(byteArray, 0, byteArray.Length); 

// Close the Stream object. 
dataStream.Close();

// Process the response
Stream responseStream; 
responseStream = request.GetResponse().GetResponseStream();

StreamReader objReader = new StreamReader(responseStream); 

StringBuilder sb = new StringBuilder(); 
string sLine = ""; 
int i = 0; 

while (sLine != null) 
{
    i++;
    sLine = objReader.ReadLine();
    sb.Append(sLine);
}

responseStream.Close();


string responseXML = sb.ToString()
祝你好运


Patrick

你能给我写一个关于如何编写此方法请求的示例吗?[WebInvoke(UriTemplate=“”,Method=“POST”),OperationContract]公共SampleItem创建(SampleItem实例)。。。。我不能为它写一个请求并得到响应。顺致敬意,Alessandro@Alex、@Polaris878、GET、POST、PUT和DELETE都有效。你可以在谷歌上找到几个例子。这里有一个:+1@Patrick,如果PUT和DELETE都有效,我认为下一步要做的是检查web服务的配置。看我的例子。