Я не знаю, что не так с моим запросом LINQ, все выглядит нормально, но я получил ошибку выше следующего кода:
if (! Dbcontext.AndroidUser.Any (user => user.Equals (value.UserName)))
Вот мой полный код для RegisterController.cs.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using APITesting.Models;
using APITesting.Utils;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace APITesting.Controllers
{
[Route("api/[controller]")]
public class RegisterController : Controller
{
NoNameRestaurantContext dbcontext = new NoNameRestaurantContext();
// POST api/<controller>
[HttpPost]
public string Post([FromBody]AndroidUser value)
{
//First we need to check that user is existing in database.
if (!dbcontext.AndroidUser.Any(user => user.Equals (value.UserName)))
{
AndroidUser user = new AndroidUser();
user.UserName = value.UserName;
user.Hash = Convert.ToBase64String(Common.GetRandomHash(16));
user.Password = Convert.ToBase64String(Common.HashPassword(
Encoding.ASCII.GetBytes(value.Password),
Convert.FromBase64String(user.Hash)));
//Save to Database
try
{
dbcontext.Add(user);
dbcontext.SaveChanges();
return JsonConvert.SerializeObject("Register Successfully");
}
catch (Exception ex)
{
return JsonConvert.SerializeObject(ex.Message);
}
}
else
{
return JsonConvert.SerializeObject("User is existing in Database");
}
}
}
}
и для класса Common.cs, который я использовал для преобразования своего пароля в hashPassword.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace APITesting.Utils
{
public class Common
{
/*
*
* FUNCTION TO CREATE RANDOM HASH STRING
*
*/
public static byte[] GetRandomHash(int length)
{
var random = new RNGCryptoServiceProvider();
byte[] hash = new byte[length];
random.GetNonZeroBytes(hash);
return hash;
}
/*
*
* FUNCTION TO CREATE PASSWORD WITH HASH
*
*/
public static byte[] HashPassword(byte[] password, byte[] hash)
{
HashAlgorithm algorithm = new SHA256Managed();
byte[] plainTextWithHashByte = new byte[password.Length + hash.Length];
for (int i = 0; i < password.Length; i++)
{
plainTextWithHashByte[i] = password[i];
}
for (int i = 0; i < hash.Length; i++)
{
plainTextWithHashByte[password.Length + i] = hash[i];
}
return algorithm.ComputeHash(plainTextWithHashByte);
}
}
}
Я изучаю этот урок: https://www.youtube.com/watch?v=b6T0_j7I9CE