我尝试在抛出FormatException时将用户重定向到Error页面,并检索在自定义异常类中生成的自定义消息。我需要使用origin(here:Product)类中捕获的异常。我使用会话状态来存储异常并检索原始异常。
使用下面的代码我得到了我需要的东西,唯一的问题是我无法检索自定义异常消息,我只是得到:
输入字符串的格式不正确。
虽然我需要获取自定义消息(没有原始消息)。
我调查了异常抛出的各种来源和方法,但我没有遇到过解决方案。
这就像我做的一个学术例子。这是我的自定义类
类
public class Product
{
private int price;
public int Price {
get { return price; }
set
{
try
{
price = value;
}
catch (FormatException e)
{
throw new CustomException();
}
}
}
public Product(int price) {
this.Price = price;
}
}
public class CustomException : FormatException
{
public CustomException() : base() { }
public override string Message
{
get
{
return "Exception caught!";
}
}
}
代码
public partial class Input : System.Web.UI.Page{
protected void btn_Click(object sender, EventArgs e){
Product product = new Product(Convert.ToInt32(txt.Text));
}
}
public partial class ErrorPage : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
Exception err = Session["LastError"] as Exception;
if (err != null)
{
err = err.GetBaseException();
lblError.Text = err.Message;
}
}
}
global.asax文件
<%@ Application Codebehind="Global.asax.cs"
Inherits="ExceptionTest.Global" Language="C#" %>
<script runat="server">
void Application_Error(object sender, EventArgs e){
Exception err = Server.GetLastError();
Session.Add("LastError", err);}
void Session_Start(object sender, EventArgs e){
Session["LastError"] = "";}
</script>
有人可以帮忙吗?
答案 0 :(得分:1)
当您尝试转换为Int32
并且从未到达try-catch
块时,会引发您的异常。如果您想测试CustomException
,请尝试使用
protected void btn_Click(object sender, EventArgs e){
try {
Product product = new Product(Convert.ToInt32(txt.Text));
}
catch (FormatException e)
{
throw new CustomException();
}
}
<强>更新强>
如果您确实需要查看Product
课程,则需要在此处转换文字。 (但这是个坏主意。尽快转换为预期类型)
您的代码将类似于:
public class Product
{
private int price;
public int Price {
get { return price; }
set
{
price = value;
}
}
public Product(string price) {
try
{
this.Price = Convert.ToInt32(price);
}
catch (FormatException e)
{
throw new CustomException();
}
}
}
你的“代码背后”:
public partial class Input : System.Web.UI.Page{
protected void btn_Click(object sender, EventArgs e){
Product product = new Product(txt.Text);
}
}
答案 1 :(得分:0)
使用Html Encode清除错误消息。
public partial class ErrorPage : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
Exception err = Session["LastError"] as Exception;
if (err != null)
{
err = err.GetBaseException();
lblError.Text = Server.HtmlEncode(err.Message);
}
}
}