在 ASP.net 中将错误传播回用户

本文关键字:传播 用户 错误 ASP net | 更新日期: 2023-09-27 17:56:57

如果他们的输入错误,我正在尝试将错误传播回用户。

下面是应该引发错误的代码:

var sql2 = "select COD_id from COD_Codes where COD_name = @Value and COD_COT_id = @codeId";
            SqlCommand cmd2 = new SqlCommand();
            cmd2.CommandText = sql2;
            cmd2.Parameters.AddWithValue("@Value", value);
            cmd2.Parameters.AddWithValue("@codeId", result);
            cmd2.Connection = connection;
            cmd2.Transaction = transaction;
            var code = Convert.ToInt32(cmd2.ExecuteScalar());
            if (code == 0)
            {
                throw new  ApplicationException(string.Format(@"({0}) is not a valid data for this credit report. Please check with your sys admin if this is a new data value", code));
            }
            return code;

这段代码比我的控制器低几级,看起来像这样:

[HttpPost]
        public HttpResponseMessage SaveCreditReport(GrowData growData)
        {
            using (SqlConnection connection = CreateSqlConnection())
            {
                using (var transaction = connection.BeginTransaction())
                {
                    try
                    {
                        var service = CreateCreditService(connection, transaction);
                        var user = GetUser(service);
                        if (log.IsInfoEnabled)
                            log.InfoFormat("Save credit report called by user '{0}' ",
                                user.UserName);
                        var growValues = growData.GrowRows.Select(growRow => new GrowValue() { Mnemonic = growRow.Mnemonic, Time = growRow.Time, Value = growRow.Value }).ToList();
                        var growCompValues = growData.GrowCompRows.Select(compRow => new GrowCompRowValue() { Mnemonic = compRow.Mnemonic, Value = compRow.Value }).ToList();
                        var reportId = service.SaveGrowCreditData(user.Id, growData.CompanyId, growValues, growCompValues, growData.Publish);
                        var message = this.Request.CreateResponse<int?>(HttpStatusCode.OK, reportId);
                        transaction.Commit();
                        return message;
                    }
                    catch
                    {
                        transaction.Rollback();
                        throw;
                    }
                }
            }
        }

我不确定我需要如何以及需要抛出什么样的异常才能将错误传播回用户级别。我不想要标准的"500 内部服务器错误"消息,而是我在代码中格式化的消息。

我可以直接从代码中抛出一个新的httpresponseexception而不是ApplicationException吗?然后它会传播回控制器级别并传播给用户吗?

在 ASP.net 中将错误传播回用户

在你的catch方法中使用CreateErrorResponse创建一个响应,使用任何合适的HttpStatusCode:

catch (ApplicationException ex)
{
    transaction.Rollback();
    return this.Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, ex);
}  

文档中的警告:

该请求必须与 HttpConfiguration 实例相关联。一个 HttpResponseMessage,其内容是 HttpError 实例的序列化表示形式 [返回]