检查Azure函数(C#)中是否存在记录
在Azure函数中使用BindAsync添加记录之前,我试图弄清楚如何检查记录是否存在。有没有一种方法可以使用我现有的实现来实现这一点,或者我需要使用不同的方法 具体检查函数底部的“output”局部变量检查Azure函数(C#)中是否存在记录,c#,azure,azure-storage,azure-functions,azure-table-storage,C#,Azure,Azure Storage,Azure Functions,Azure Table Storage,在Azure函数中使用BindAsync添加记录之前,我试图弄清楚如何检查记录是否存在。有没有一种方法可以使用我现有的实现来实现这一点,或者我需要使用不同的方法 具体检查函数底部的“output”局部变量 [FunctionName("Signup")] public static async Task<IActionResult> Signup([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route ="user/signu
[FunctionName("Signup")]
public static async Task<IActionResult> Signup([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route ="user/signup")] HttpRequest Req, Binder binder, ILogger log)
{
var UserId = System.Guid.NewGuid().ToString();
var FirstName = Req.Form["FirstName"];
var LastName = Req.Form["LastName"];
string FbId = null;
if (Req.Form.ContainsKey("FbId"))
{
FbId = Req.Form["FbId"];
}
var Email = Req.Form["Email"];
var PasswordPlain = Req.Form["Password"];
string hash;
hash = BCrypt.Net.BCrypt.HashPassword(PasswordPlain);
var ProfilePic = Req.Form.Files.GetFile("ProfilePic");
var ProfilePicStream = ProfilePic.OpenReadStream();
var ProfilePicFileName = await UploadImage(ProfilePicStream, UserId, binder);
if (FbId == null)
{
log.LogInformation("No FB detected");
}
else
{
log.LogInformation("FB detected");
}
var NewUser = new UserTableEntity
{
PartitionKey = 1.ToString(),
RowKey = UserId,
FirstName = FirstName,
LastName = LastName,
FbId = FbId,
Email = Email,
ProfilePic = ProfilePicFileName,
Password = hash
};
var attributes = new System.Attribute[]
{
new StorageAccountAttribute("TabbrDevCosmosDb"),
new TableAttribute("Users")
};
var output = await binder.BindAsync<IAsyncCollector<UserTableEntity>>(attributes);
await output.AddAsync(NewUser);
return new OkObjectResult(JsonConvert.SerializeObject(NewUser));
}
[函数名(“注册”)]
公共静态异步任务注册([HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=“user/Signup”)]HttpRequest请求、绑定器、ILogger日志)
{
var UserId=System.Guid.NewGuid().ToString();
var FirstName=Req.Form[“FirstName”];
var LastName=Req.Form[“LastName”];
字符串FbId=null;
if(要求表格ContainsKey(“FbId”))
{
FbId=要求表格[“FbId”];
}
var电子邮件=请求表格[“电子邮件”];
var PasswordPlain=Req.Form[“Password”];
字符串散列;
hash=BCrypt.Net.BCrypt.HashPassword(PasswordPlain);
var ProfilePic=Req.Form.Files.GetFile(“ProfilePic”);
var ProfilePicStream=ProfilePic.OpenReadStream();
var ProfilePicFileName=等待上载映像(ProfilePicStream、UserId、binder);
如果(FbId==null)
{
日志信息(“未检测到FB”);
}
其他的
{
日志信息(“FB检测”);
}
var NewUser=newusertableentity
{
PartitionKey=1.ToString(),
RowKey=UserId,
FirstName=FirstName,
LastName=LastName,
FbId=FbId,
电子邮件=电子邮件,
ProfilePic=ProfilePicFileName,
密码=散列
};
var attributes=新系统属性[]
{
新的StorageAccountAttribute(“TabbrDevCosmosDb”),
新的TableAttribute(“用户”)
};
var output=await binder.BindAsync(属性);
等待输出。AddAsync(NewUser);
返回新的OkObjectResult(JsonConvert.SerializeObject(NewUser));
}
我们必须以一种基本的方式执行查询,以查找是否有重复的记录
添加声明性表输入绑定以便于查询
public static async Task<IActionResult> Signup(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "user/signup")] HttpRequest Req,
[Table("Users", Connection = "TabbrDevCosmosDb")]CloudTable table,
Binder binder, ILogger log)
如果我的解决方案有效,你能接受它供其他人参考吗?问问你是否需要进一步的帮助。
TableQuery<UserTableEntity> existQuery = new TableQuery<UserTableEntity>().Where(
TableQuery.GenerateFilterCondition("Email", QueryComparisons.Equal, Email));
var queryResult = table.ExecuteQuerySegmentedAsync(existQuery, null).Result.Results;
if (queryResult.Count == 0)
{
var attributes = new System.Attribute[]
{
new StorageAccountAttribute("TabbrDevCosmosDb"),
new TableAttribute("Users")
};
var output = await binder.BindAsync<IAsyncCollector<UserTableEntity>>(attributes);
await output.AddAsync(NewUser);
return new OkObjectResult(JsonConvert.SerializeObject(NewUser));
}
else
{
return new BadRequestObjectResult("Already exists");
}