撰写

时间:2016-04-17 10:50:01

标签: c# asp.net-mvc azure

我用C#开发了一个简单的Azure Webapp。并使用Azure存储帐户表来保存网站的某些记录。

在读取和写入操作上,它在我自己的计算机上运行良好,具有真实的连接字符串。我可以使用“Azure Storage Explorer”找到记录。

然而,在我部署应用程序之后。当我尝试编写表时,云版本不断抛出Http 400错误。但是读取操作仍然可以正常工作。 (本地版本总是正常。)

enter image description here

问题很奇怪。请帮帮我。

感谢。

== UPDATE ==

拯救&查询代码是这样的。

public class CodeSnippet: TableEntity
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string FileType { get; set; }
    public string Code { get; set; }

    public Guid Save()
    {
        var guid = Guid.NewGuid();
        var datetime = DateTimeOffset.UtcNow;

        this.RowKey = guid.ToString();
        this.PartitionKey = datetime.ToString();

        var json = JsonConvert.SerializeObject(this);

        var client = AzureStorage.DefaultClient.Instance.GetTableClient();
        var table = client.GetTableReference("privateshare");
        var insertOp = TableOperation.Insert(this);

        table.Execute(insertOp);
        return guid;
    }

    public static CodeSnippet Query(Guid? guid)
    {
        if (guid == null)
        {
            return null;
        }
        var client = AzureStorage.DefaultClient.Instance.GetTableClient();
        var table = client.GetTableReference("privateshare");

        var query = new TableQuery<CodeSnippet>()
            .Where(TableQuery.GenerateFilterCondition(
                "RowKey", QueryComparisons.Equal, guid.ToString()))
            .Take(1);
        var res = table.ExecuteQuery(query);
        return res?.First();
    }
}

1 个答案:

答案 0 :(得分:1)

问题解决了。

当我将DateTimeOffset.UtcNow.ToString()作为分区键时发生错误。

将其更改为DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString()后,它最终会正常工作。

我不知道&amp;问题发生的原因。但我猜“PartitionKey”中的特殊字符可能是问题的原因。