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

如何在静态类捕获异常时重定向页面并展示异常信息?

实现异常捕获后重定向首页并显示信息的方案

一、职责分离:数据访问层保持原有逻辑

你的静态数据访问方法无需直接处理页面重定向,它的核心职责是数据操作,UI交互逻辑应该交给上层处理。保留原有抛出异常的逻辑,让调用它的UI层/控制器来处理异常:

public static List<Stok> GetIndexStok(string dil, string SubeKodu, string anasayfa, string kisit)
{
    using (BIRLIKB2BEntities db = new BIRLIKB2BEntities())
    {
        try
        {
            List<Stok> LST = db.Database.SqlQuery<Stok>("exec [PRC_INDEX_STOK] @dbName, @isAnaSayfa,@Dil,@SubeKodu,@Kisit",
               new SqlParameter("@dbName", WebConfigurationManager.AppSettings["SERVER_USER"].ToString()), 
               new SqlParameter("@isAnaSayfa", anasayfa), 
               new SqlParameter("@Dil", dil), 
               new SqlParameter("@SubeKodu", SubeKodu), 
               new SqlParameter("@Kisit", kisit)).ToList();
            return LST;
        }
        catch (Exception ex)
        {
            // 可在此处先记录异常日志(写入文件/数据库)
            // LogHelper.RecordError(ex);
            throw; // 将异常抛给上层处理
        }
    }
}

二、在UI层(控制器/页面)处理重定向和信息展示

根据你使用的ASP.NET技术类型,分别处理:

情况1:ASP.NET MVC

在调用GetIndexStok的控制器Action中捕获异常,将友好提示存入TempData(临时存储,仅单次请求有效),再重定向到首页:

public ActionResult StokList(string dil, string subeKodu, string anasayfa, string kisit)
{
    try
    {
        var stokList = YourStaticClass.GetIndexStok(dil, subeKodu, anasayfa, kisit);
        return View(stokList);
    }
    catch (Exception ex)
    {
        // 记录详细异常日志
        // LogHelper.RecordError(ex);
        
        // 存入友好提示,避免暴露敏感的原始异常信息
        TempData["ErrorMessage"] = "获取库存数据时出现错误,请稍后重试。";
        // 重定向到首页
        return RedirectToAction("Index", "Home");
    }
}

然后在首页的View(如Index.cshtml)中读取TempData并展示:

@if (TempData["ErrorMessage"] != null)
{
    <div class="alert alert-danger">@TempData["ErrorMessage"]</div>
}

情况2:ASP.NET WebForms

在页面后台代码中捕获异常,将提示信息存入Session,再重定向到首页:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        try
        {
            string dil = Request.QueryString["dil"];
            string subeKodu = Request.QueryString["SubeKodu"];
            string anasayfa = Request.QueryString["anasayfa"];
            string kisit = Request.QueryString["kisit"];
            
            var stokList = YourStaticClass.GetIndexStok(dil, subeKodu, anasayfa, kisit);
            // 绑定数据到页面控件
            GridView1.DataSource = stokList;
            GridView1.DataBind();
        }
        catch (Exception ex)
        {
            // 记录详细异常日志
            // LogHelper.RecordError(ex);
            
            Session["ErrorMessage"] = "获取库存数据失败,请稍后尝试。";
            Response.Redirect("~/Default.aspx");
        }
    }
}

在首页(Default.aspx)的前台读取Session并展示,显示后清除Session避免重复展示:

<% if (Session["ErrorMessage"] != null) { %>
    <div style="color: red; padding: 10px; border: 1px solid #dc3545; border-radius: 4px;">
        <%= Session["ErrorMessage"] %>
        <% Session.Remove("ErrorMessage"); %>
    </div>
<% } %>

三、关键注意事项

  • 安全防护:绝对不要直接将ex.Message展示给用户,原始异常信息可能包含数据库连接字符串、SQL语句等敏感内容,必须使用自定义的友好提示。
  • 日志记录:异常发生时一定要记录详细日志(如异常消息、堆栈跟踪、发生时间),方便后续排查问题。

内容的提问来源于stack exchange,提问作者Ahmet Enes Söylemez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:43:09