![](/img/trans.png)
[英]ASP.NET Core Web API custom AuthorizeAttribute issue
[英]asp.net core web api null data issue
我正在使用 react 和 asp.net 核心 web api 构建电子商务网站。 用户必须立即注册。 我做了必要的反应。 当他点击注册按钮时,他进入了后端的寄存器controller和必要的功能,但是传入的用户数据的值是null。 什么问题我想不通
React.js - 注册表单
import '../../Css/SignUpPage.css'
// import { useForm } from 'react-hook-form'
import { SignUpSchema } from "../../validations/SignUpChema"
import React from 'react';
import axios from 'axios'
import { useFormik } from 'formik'
export default function SingUpPage() {
const { handleSubmit, handleChange, values, errors, touched } =
useFormik({
initialValues: {
Name: "",
LastName: "",
Mail:"",
Password: "",
confirm_password: "",
},
onSubmit: (values) => {
console.log(values);
try {
axios({
method: "post",
url: "http://localhost:64082/api/users/register",
data: { values }
});
return alert("Success!");
} catch (error) {
return alert("Error: " + error);
}
},
validationSchema: SignUpSchema
})
return (
<div>
<div className="signup-form">
<form onSubmit={handleSubmit}>
<h2>Sign Up</h2>
<p>Please fill in this form to create an account!</p>
<div className="form-group">
<div className="input-group">
<input
type="text"
className="form-control"
name='Name'
placeholder="First Name"
value={values.Name}
onChange={handleChange}
/>
</div>
</div>
{errors.Name && touched.Name && (
<div >{errors.Name}</div>
)}
<div className="form-group">
<div className="input-group">
<input
type="text"
className="form-control"
name="LastName"
placeholder="Second Name"
value={values.LastName}
onChange={handleChange} />
</div>
</div>
{errors.LastName && touched.LastName && (
<div >{errors.LastName}</div>
)}
<div className="form-group">
<div className="input-group">
<input
type="email"
className="form-control"
name="Mail"
placeholder="Email Address"
value={values.Mail}
onChange={handleChange} />
</div>
</div>
{errors.Mail && touched.Mail && (
<div >{errors.Mail}</div>
)}
<div className="form-group">
<div className="input-group">
<input
type="text"
className="form-control"
name="Password"
placeholder="Password"
value={values.Password}
onChange={handleChange} />
</div>
</div>
{errors.Password && touched.Password && (
<div >{errors.Password}</div>
)}
<div className="form-group">
<div className="input-group">
<input
type="text"
className="form-control"
name="confirm_password"
placeholder="Confirm Password"
value={values.confirm_password}
onChange={handleChange} />
</div>
</div>
{errors.confirm_password && touched.confirm_password && (
<div >{errors.confirm_password}</div>
)}
<button
type="submit"
className="btn btn-primary btn-lg">
Sign Up
</button>
</form>
<div className="text-center">Already have an account? - Login here</div>
</div>
</div>
);
}
Asp.net 内核-用户控制器-寄存器功能
[HttpPost("register")]
public async Task<IActionResult> Register (User oUser)
{
var result = _userService.Register(oUser);
if (result != null)
{
return Ok(result);
}
return BadRequest(result);
}
我的 DataAccess Layer 注册存储库
using Core.Common;
using DataAccessLayer.Abstract;
using EntityLayer.Concrete;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace DataAccessLayer.Concrete
{
public class UserRepository : GenericRepository<User>, IUserDal
{
public string HashPassword(string password)
{
SHA256 hash = SHA256.Create();
var passwordBytes = Encoding.Default.GetBytes(password);
var hashedpassword = hash.ComputeHash(passwordBytes);
return Convert.ToHexString(hashedpassword);;
}
public async Task Login(User user)
{
var userfound = dbContext.Users.Any(u => u.Mail == user.Mail);
if (userfound)
{
var loginuser = await dbContext.Users.FirstOrDefaultAsync(u => u.Mail == user.Mail);
if (HashPassword($"{user.Password}{loginuser.PasswordKey}") == loginuser.Password)
{
Console.WriteLine(user.Name + " başarılı şekilde giriş yapıldı...");
}
else
{
Console.WriteLine(" giriş yapılamadı...");
}
}
}
//new User() { Name = user.Name, LastName = user.LastName, Password = HashedPW, PasswordKey = salt,Mail = user.Mail }
public async Task Register(User user)
{
var salt = DateTime.Now.ToString();
var HashedPW = HashPassword($"{user.Password}{salt}");
await dbContext.Users.AddAsync(new User { Name = user.Name, LastName = user.LastName, Password = HashedPW, PasswordKey = salt, Mail = user.Mail });
dbContext.SaveChanges();
}
}
}
我的用户实体
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EntityLayer.Concrete
{
public class User
{
[Key]
public int UserID { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public string Mail { get; set; }
public string Password { get; set; }
public string PasswordKey { get; set; }
public List<Product> Products { get; set; }
}
}
当我在数据访问层查看用户进入寄存器function的值时,我看到所有这些值都是null,因此无法添加到数据库中。
Null 数据访问层寄存器功能中的数据
UserID 不是 null 等于零
这个 function 是异步的
await dbContext.Users.AddAsync(new User { Name = user.Name, LastName = user.LastName, Password = HashedPW, PasswordKey = salt, Mail = user.Mail }); //Async
dbContext.SaveChanges(); //sync
但是您的 SaveChange Function 是 Sync function,当您尝试保存更改时,您的保存更改 function 正在首先工作并且您的实体未设置为数据库。 您应该像这样使用异步 SaveChange function:
dbContext.SaveChangesAsync();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.