WCF REST使用POST或PUT 400 Bad Request添加数据

时间:2009-10-28 03:22:24

标签: wcf rest

HI 如何使用wcf rest架构添加数据。 我不想使用channelfactory来调用我的方法。 类似于用于GET的webrequest和webresponse。类似于ajax WebServiceProxy restInvoke的东西 或者我总是必须使用Webchannelfactory实现

我使用以下

获得400 BAD请求

Dim url As String =“http://localhost:4475/Service.svc/Entity/Add”         Dim req As WebRequest = WebRequest.Create(url)         req.Method =“POST”         req.ContentType =“application / xml; charset = utf-8”         req.Timeout = 30000         req.Headers.Add(“SOAPAction”,url)

    Dim xEle As XElement
    xEle = <Entity xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                 <Name>Entity1</Name>
             </Entity>

    Dim sXML As String = xEle .Value
    req.ContentLength = sXML.Length
    Dim sw As New System.IO.StreamWriter(req.GetRequestStream())
    sw.Write(sXML)
    sw.Close()

    Dim res as HttpWebResponse = req.GetResponse()

    Sercice Contract is as follows

   <OperationContract()> _
   <WebInvoke(Method:="PUT", UriTemplate:="Entity/Add")> _
   Function AddEntity(ByVal e1 As Entity)

     DataContract is as follows

    <Serializable()> _
    <DataContract()> _
    Public Class Entity
      private m_Name as String
     <DataMember()> _
      Public Property Name() As String
      Get
        Return m_Name
      End Get
      Set(ByVal value As String)
        m_Name = value
      End Set
      End Property
    End Class

感谢

2 个答案:

答案 0 :(得分:0)

在REST中,您可以使用HTTP POST(如果服务器分配资源名称)或HTTP PUT(如果客户端分配资源名称)创建资源(即添加数据)。您使用PUT更新资源,并使用DELETE删除它。只有HTTP方法会更改。

Rob Bagby在REST in WCF上有11部分系列。

答案 1 :(得分:0)

我怀疑你可能要么缺少XML中的某些命名空间,要么就像DataContractSerializer想要的那样没有格式化XML。

尝试使用DataContractSerializer反序列化Entity类的实例,并确切了解XML应该是什么样子。