Проверка наличия записи в функции Azure (C #) - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь выяснить, как проверить, существует ли запись, прежде чем добавить ее с помощью BindAsync в функции Azure. Есть ли способ сделать это, используя мою существующую реализацию, или мне нужно использовать другой метод?

Специально проверьте нижнюю часть функции вокруг локальной переменной «output».

[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));
}  

1 Ответ

0 голосов
/ 30 октября 2018

Мы должны сделать это простым способом, выполнить запрос, чтобы найти дубликат записи.

Добавить декларативную привязку ввода таблицы для запроса

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)

Выполнить запрос, в качестве примера взять Email.

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");
}
...