我多年来一直在使用azure table storage,而且我不确定"是什么"这样做的方法是使用最新的WindowsAzure.Storage库,版本5.0.1-preview(用于新的ASP.NET 5应用程序):
问题: 给定分区键和行键,删除行而不先检查是否存在,如果不存在则不会失败。
当前解决方案:此代码有效......但异常处理令人困惑:
public async Task DeleteRowAsync(CloudTable table, string partition, string row)
{
var entity = new DynamicTableEntity(partition, row);
entity.ETag = "*";
var op = TableOperation.Delete(entity);
try
{
await table.ExecuteAsync(op);
}
catch (Exception ex)
{
var result = RequestResult.TranslateFromExceptionMessage(ex.Message);
if (result == null || result.HttpStatusCode != 404)
throw ex;
}
}
问题:
异常本身向我指出了这个TranslateFromExceptionMessage方法......我无法找到关于它的大量信息和WrappedStorageException(抛出的异常的类型)。这是检查存储异常404错误的某种新的/首选方法吗?有没有人知道现在所有的存储异常都会使用它,还是我需要编写代码来测试并找出它?
存在StorageException类型的InnerException。据推测,我们使用StorageException.RequestInformation.HttpStatusCode的旧代码可以以相同的方式访问此内部异常。那是"好的",还是以某种方式解析这些新的XML错误消息更好或更强大?
对于这种情况,我应该考虑采用不同的方法吗?
答案 0 :(得分:0)
当配置为使用Azure表存储时,在AspNet WebHooks项目中可以找到类似的方法。看看 signup() {
this.performingRequest = true
fb.auth.createUserWithEmailAndPassword(this.signupForm.email, this.signupForm.password).then(user => {
this.$store.commit('setCurrentUser', user)
// create user obj
fb.usersCollection.doc(user.uid).set({
name: this.signupForm.name,
email: this.signupForm.email
}).then(() => {
this.$store.dispatch('fetchUserProfile')
this.performingRequest = false
this.$router.push('/world')
}).catch(err => {
console.log(err)
this.performingRequest = false
this.errorMsg = err.message
})
}).catch(err => {
console.log(err)
this.performingRequest = false
this.errorMsg = err.message
})
},
StorageManager类。
我不确定这是否会在您已经发现的内容的基础上增加很多,但是他们会处理所有事情而不会引发异常,并且始终返回状态代码,以便您可以根据需要做出反应。
这里的区别是它们将Microsoft.Aspnet.WebHooks.custom.AzureStorage
和table
传递给多功能ExecuteAsync方法,而不是专门用于删除,但这只是实现细节。
示例中的相关代码:
operation
答案 1 :(得分:0)
RequestResult.TranslateFromExceptionMessage
方法现在标记为 [Obsolete]
,我想要一种自己忽略 404 的方法。
根据您查看 RequestInformation.HttpStatusCode
的提示,我得出以下结论:
try
{
await table.ExecuteAsync(op);
}
catch (StorageException storEx)
{
if (storEx.RequestInformation.HttpStatusCode != 404)
{
throw;
}
}