You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击Register无跳转且数据未写入数据库排查求助

注册功能故障求助

环境信息

  • 开发环境:个人家庭实验室,VSCode编写代码(AI辅助)
  • 代码托管:GitHub仓库
  • CI/CD工具:Azure DevOps
  • 部署平台:Azure Web Services(Web应用+SQL数据库)

故障现象

近几日数据库停止写入用户注册/登录数据,当前仅针对Register功能反馈问题:

  • 视图加载正常、页面跳转正常
  • 点击Register按钮后无跳转,用户提交的注册信息未存入数据库,上周该功能运行正常

排查情况

  • Web应用日志流、浏览器开发者控制台均未发现错误
  • 提交注册请求后返回200状态码,随后页面刷新,无法定位故障根源
  • 已核查提交记录,未发现异常
  • 开发者控制台显示POST请求状态为200,无任何错误或警告信息

相关代码

Account控制器

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using MyEcommerceBackend.Models;
using SendGrid;
using SendGrid.Helpers.Mail;

namespace MyEcommerceBackend.Controllers
{
    [Route("[controller]")]
    public class AccountController : Controller
    {
        private readonly UserManager<IdentityUser> _userManager;
        private readonly SignInManager<IdentityUser> _signInManager;
        private readonly IConfiguration _configuration;

        public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager, IConfiguration configuration)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _configuration = configuration;
        }

        [HttpPost("Register")]
        public async Task<IActionResult> Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.Email != null && model.Password != null)
                {
                    var user = new IdentityUser { UserName = model.Email, Email = model.Email };
                    var result = await _userManager.CreateAsync(user, model.Password);

                    if (result.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, false);
                        return RedirectToAction("RegisterSuccess", "View");
                    }

                    foreach (var error in result.Errors)
                    {
                        ModelState.AddModelError("", error.Description);
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Email and Password must not be null");
                }
            }
            return View("Register", model);
        }

注册模型(RegisterModel)

using System.ComponentModel.DataAnnotations;

namespace MyEcommerceBackend.Models
{
    public class RegisterModel // 用户注册模型
    {
        [Required]
        [EmailAddress]
        public string? Email { get; set; } // 必填邮箱属性

        [Required]
        [MinLength(6)] // 密码最小长度,可按需修改
        public string? Password { get; set; } // 必填密码属性

        [Compare("Password")] // 确保与密码字段匹配
        public string? ConfirmPassword { get; set; } // 必填确认密码属性
    }
}

View控制器

using Microsoft.AspNetCore.Mvc;
using MyEcommerceBackend.Models;

public class ViewController : Controller // 处理用户视图(注册、登录等)的控制器
{
    [HttpGet]
    public IActionResult Register()
    {
        return View(); // 返回注册视图
    }

    [HttpPost]
    public IActionResult Register(RegisterModel model)
    {
        return View(model); // 返回注册视图并携带模型数据
    }

    public IActionResult RegisterSuccess()
    {
        return View(); // 返回注册成功视图
    }

Program.cs

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using MyEcommerceBackend.Models;

namespace MyEcommerceBackend
{
    public class Authentication
    {
        // 主方法 - 应用程序入口点
        public static void Main(string[] args)
        {
            // 创建并运行Web主机
            CreateHostBuilder(args).Build().Run();
        }

        // 定义主机构建器
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    // 配置Web主机使用当前类(Authentication)作为启动类
                    webBuilder.UseStartup<Authentication>();
                });

        // 接受配置设置的构造函数
        public Authentication(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        // 配置属性
        public IConfiguration Configuration { get; }

        // ConfigureServices方法 - 用于注册应用程序服务
        public void ConfigureServices(IServiceCollection services)
        {
            // 从Azure读取环境变量
            string server = Configuration["DBServer"] ?? throw new Exception("Server环境变量未设置。");
            string database = Configuration["DB"] ?? throw new Exception("Database环境变量未设置。");
            string username = Configuration["DBLogin"] ?? throw new Exception("Username环境变量未设置。");
            string password = Configuration["DBPW"] ?? throw new Exception("Password环境变量未设置。");

            // 构造连接字符串
            string connectionString = $"Server=tcp:{server},1433;Initial Catalog={database};Persist Security Info=False;User ID={username};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";

            // 使用连接字符串添加DbContext
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(connectionString));

            // 注册控制器服务
            services.AddControllers();

            // 添加MVC支持(包含视图和控制器)
            services.AddControllersWithViews();

            // 添加身份验证和授权服务
            services.AddIdentity<IdentityUser, IdentityRole>(options =>
            {
            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

            // 配置API资源管理器和Swagger用于API文档
            services.AddEndpointsApiExplorer();
            services.AddSwaggerGen();
        }

        // Configure方法 - 用于配置HTTP请求管道
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // 在开发环境中启用Swagger
            if (env.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI(); // 启用Swagger UI以浏览API文档
            }

            // 添加路由中间件
            app.UseRouting();

            // 添加身份验证和授权中间件
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseStaticFiles(); // 提供静态文件(如CSS、JavaScript等)

            // 启用端点路由并配置默认路由
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=View}/{action=Login}/{id?}"); // 定义默认路由
                endpoints.MapControllers();
            });
        }
    }
}

注册视图(Register View)

<!DOCTYPE html>
<html lang="en">
@{
    ViewData["Title"] = "Please enter your Email and Password then click Register.";
}
<h2>@ViewData["Title"]</h2>
<form method="post" asp-controller="Account" asp-action="Register">
    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text" id="email-label">Email:</span>
        </div>
        <input type="text" class="form-control" id="Email" name="Email" aria-describedby="email-label" required autocomplete="email">
    </div>
    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text" id="password-label">Password:</span>
        </div>
        <input type="password" class="form-control" id="Password" name="Password" aria-describedby="password-label" required autocomplete="new-password">
    </div>
    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text" id="confirm-password-label">Confirm Password:</span>
        </div>
        <input type="password" class="form-control" id="ConfirmPassword" name="ConfirmPassword" aria-describedby="confirm-password-label" required autocomplete="new-password">
    </div>
    <button type="submit" class="btn btn-primary mb-3">Register</button>
</form>
</html>

复现步骤

  1. 打开Chrome浏览器访问网站
  2. 点击页面上的Register按钮
  3. 填写邮箱、密码及确认密码字段
  4. 点击Register提交按钮

预期与实际结果

  • 预期结果:页面跳转至注册成功页面,用户信息存入SQL数据库
  • 实际结果:页面刷新,无跳转动作,用户数据未写入数据库

内容的提问来源于stack exchange,提问作者Jonathan Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:00:55