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

Azure SQL Server与Web应用连接异常求助:资源不可用错误

解决Azure Web应用连接Azure SQL后的资源找不到错误及登录功能实现

一、排查“The resource you are looking for has been removed...”错误

  • 检查路由配置
    确认登录页、跳转目标页的路由规则是否正确:

    • 若使用.NET MVC,检查控制器类名、动作方法名是否与路由匹配,比如[Route("Login")]标注是否准确,Web.config中的路由规则有无冲突。
    • 若使用静态页面或其他前端框架,确认页面文件路径在Azure部署后未发生变化,比如本地的/Views/Login.cshtml在部署后是否处于正确目录。
  • 验证连接字符串有效性

    • 确认应用已正确加载Azure门户的连接字符串:在代码中临时添加日志输出(如Console.WriteLine(ConfigurationManager.ConnectionStrings["YourConnName"].ConnectionString);),查看部署后的应用日志,确认连接字符串是Azure SQL的正确配置。
    • 手动测试连接字符串:用SSMS或Azure Data Studio填入连接字符串,确认能成功连接数据库、读取用户表数据,排除账号密码、服务器名拼写错误。
    • 检查连接字符串格式:Azure SQL标准格式为:
      Server=tcp:{server-name}.database.windows.net,1433;Initial Catalog={db-name};Persist Security Info=False;User ID={user-name};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
      
      确保{server-name}、{db-name}及账号密码无错误。
  • 确认部署与服务状态

    • 查看Azure应用服务的部署中心,确认最新代码已成功部署,无失败记录。
    • 重启应用服务:在Azure门户的应用服务概览页点击“重启”,确保连接字符串配置生效。
  • 检查网络与权限

    • 配置Azure SQL防火墙:在SQL服务器的“防火墙和虚拟网络”设置中,勾选“允许Azure服务和资源访问此服务器”,或添加应用服务的出站IP到防火墙规则。
    • 验证SQL账号权限:确保连接字符串中的SQL账号拥有db_datareader(读取数据)和db_datawriter(修改数据)权限,可在Azure SQL的“权限”面板中配置。

二、实现登录校验功能

1. 后端校验逻辑(以.NET MVC为例)

在登录控制器的POST方法中,实现数据库校验逻辑:

[HttpPost]
public ActionResult Login(LoginViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    string connString = ConfigurationManager.ConnectionStrings["AzureSQLConn"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connString))
    {
        conn.Open();
        // 生产环境必须使用密码哈希(如BCrypt),禁止明文存储/校验
        string query = "SELECT Id FROM Users WHERE Username = @Username AND PasswordHash = @PasswordHash";
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            cmd.Parameters.AddWithValue("@Username", model.Username);
            // 示例:用BCrypt哈希输入密码后对比数据库存储的哈希值
            string hashedPassword = BCrypt.Net.BCrypt.HashPassword(model.Password);
            cmd.Parameters.AddWithValue("@PasswordHash", hashedPassword);

            var userId = cmd.ExecuteScalar();
            if (userId != null)
            {
                // 登录成功,跳转至主页
                return RedirectToAction("Index", "Home");
            }
            else
            {
                // 校验失败,添加错误提示
                ModelState.AddModelError("", "no such username or password");
                return View(model);
            }
        }
    }
}

2. 前端错误提示

在登录页视图中添加验证摘要,显示错误信息:

@model LoginViewModel

<div class="login-form">
    @Html.ValidationSummary(false, "", new { @class = "text-danger mb-3" })
    <form method="post">
        <div class="form-group">
            @Html.LabelFor(m => m.Username)
            @Html.TextBoxFor(m => m.Username, new { @class = "form-control" })
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
        </div>
        <button type="submit" class="btn btn-primary">Login</button>
    </form>
</div>

3. 关键注意事项

  • 密码安全:永远不要明文存储密码,使用BCrypt、Argon2等哈希算法存储密码哈希值,校验时对输入密码哈希后再与数据库对比。
  • 日志记录:添加日志(如Serilog、NLog)记录登录请求的参数、数据库查询结果,便于排查后续问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:27