通过REST Web API更新Azure表存储记录

时间:2014-07-09 12:30:29

标签: ajax rest asp.net-web-api azure-table-storage

我正在测试Azure表存储的REST API服务,我可以从表中获得没有问题的数据,但我似乎无法从javascript更新记录。使用Fiddler进行相同的操作可以起作用。网址是

的https:// “我的账户” .table.core.windows.net / p73cca0789a574fd4a5b98012a8bb56bf(PartitionKey =%27Settings%27,RowKey =%27GeneralSettings_UICulture_1%27)SV = 2014年2月14日&安培; TN = p73cca0789a574fd4a5b98012a8bb56bf&安培; SPK =设置&安培; EPK =设置&安培; SIG = UE%2BdY4qa0Kk8MJ083jzuAqn7miGmIBV2C4DK6x7LL%双品%3D&安培; SE = 2014-07-10T12%3A02%3A12Z&安培; SP = raud

在Fiddler中我将PUT设置为httpMethod,这是请求体:

{
  Value: 'en',
  Version: 1,
  SettingName: 'GeneralSettings'
}

它工作正常,如果我检查Azure上的表,值正确更新 从我的网络应用程序,我使用amplifyjs进行ajax调用,定义如下方法:

amplify.request.define('manageSetting', 'ajax', {
            url: url,
            dataType: 'json',
            beforeSend: function( xhr ) {
                xhr.setRequestHeader("Content-Type", "application/json");
            },                
            decoder: "defaultBehavior",
            type: httpMethod
        });

我收到400 Bad Request错误,并显示以下消息:'其中一个请求输入无效' 在Firebug中,我可以看到这些是我的请求标题:

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length  46
Content-Type    application/json; charset=UTF-8
DNT 1
Host    "myaccount".table.core.windows.net
Origin  https://localhost:444
Referer https://localhost:444/MyWebApp/projects/dde1b522-0c7d-40f1-8e08-5c39a1ce91ef
User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0
x-ms-date   Wed, 09 Jul 2014 14:10:24 GMT
x-ms-version    2014-02-14

Firebug中请求的“Put”选项卡指出:

Value=en&Version=1&SettingName=GeneralSettings

我错过了什么吗? 感谢名单

2 个答案:

答案 0 :(得分:0)

您是否为帐户的桌面服务配置了CORS? (见http://msdn.microsoft.com/library/azure/dn535601.aspx
如果这不是问题,你能看一下ajax调用中的Fiddler跟踪,看看它与Fiddler直接发送的内容之间的区别吗?

答案 1 :(得分:0)

好的,我解决了...... 我不得不JSON.stringify我的数据对象,这里是新代码:

amplify.request.define('manageSetting', 'ajax', {
            url: url,
            dataType: 'json',
            contentType: 'application/json',
            decoder: "defaultBehavior",
            type: httpMethod
        });

        var data = options.settingObject;  //this is a js object in the form { key1: value1, key2: value2 }
        data = data ? JSON.stringify(data) : data;

        return amplify.request({
            resourceId: 'manageSetting',
            data: data,
            success: callbacks.success,
            error: callbacks.error
        });