繁体   English   中英

asp.net 核心 web api null 数据

[英]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 数据访问层寄存器功能中的数据

  1. 姓名
  2. 邮件
  3. 密码
  4. 密码密钥
  5. 产品

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM