使用jquery ajax PUT请求WCF Rest服务

时间:2012-03-11 05:13:51

标签: jquery ajax rest

嗨我的服务器上有这个代码:

[OperationContract]
    [WebInvoke(UriTemplate = "createinvoice", Method = "PUT")]
    public Invoice CreateInvoice(Invoice instance)
    {
        // TODO: Add the new instance of SampleItem to the collection
        try
        {

            string icode = instance.InvoiceCode;


            return new Invoice() {InvoiceCode = icode };
        }
        catch( Exception )
        {
            throw new NotImplementedException();
        }

    }

现在在我的客户端:

var instance = {};
    instance.InvoiceCode = "INV0004";
    //instance.AmountPaid = 1000;
    alert (JSON.stringify(instance));
    $.ajax({
        //cache:false,
        url : 'http://localhost/Mobile/POS/createinvoice/',
        data: JSON.stringify(instance),
        type: 'PUT',
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        processData: false,
        async:false,
        success: function(msg){
            alert(JSON.stringify(msg));
        },
        error: function(jqXHR, exception){
            alert("error "+ jqXHR.status);
        }
    });

现在根据我读过的内容,PUT方法不会将数据附加到URL本身。现在我每次使用firebug运行它时都会看到404 not Found错误。我几乎是新的,所以我现在还没有真正的线索。与此相比,get方法非常简单。你能帮我弄清楚什么是错的吗?谢谢。

更新

我在firebug上查看了xhr,这是响应的一部分(在HTML中)

<p xmlns="">Endpoint not found. Please see the <a rel="help-page" href="http://localhost/Mobile/POS/help">service help page</a> for constructing valid requests to the service.</p>

如果我正确地阅读它,它说我在做出实际要求时出了点问题?那格式错了吗?

更新结束

1 个答案:

答案 0 :(得分:1)

试试这个ResponseFormat = WebMessageFormat.Json

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,UriTemplate = "createinvoice", Method = "PUT")]
public Invoice CreateInvoice(Invoice instance){
   ***
}

修改

所有浏览器都不支持jQuery documentation put

  

<强>型

     

默认值:'GET'要发出的请求类型(“POST”或“GET”),   默认为“GET”。注意:其他HTTP请求方法,例如PUT和   DELETE,也可以在这里使用,但并非所有人都支持它们   浏览器。