我正在为在MVC中开发的应用程序使用自定义异常。 我正在使用下面的链接使用了解如何处理自定义异常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace epay.Services.ExceptionClasses
{
public class InvalidInputException : Exception
{
public InvalidInputException()
{
}
public InvalidInputException(string message) : base(message)
{
}
public InvalidInputException(string message, Exception inner) : base(message, inner)
{
}
}
}
但是我完全混淆了如何使用这些带有消息和内部异常作为参数的构造函数。
我在下面的控制器中有代码......
[HttpPost]
public ActionResult Create(PartyVM PartyVM)
{
try
{
PartyService partyService = new PartyService();
var i = partyService.Insert(PartyVM);
return RedirectToAction("SaveData", PartyVM);
}
catch (InvalidInputExceptione e)
{
CommonMethod commonMethod = new CommonMethod();
PartyVM.AccountTypes = commonMethod.GetAccountTypes();
TempData["error"] = e.Message.ToString() + "Error Message";
return View("Create", PartyVM);
}
}
答案 0 :(得分:1)
异常是在thrown
之前构建的。您共享的代码catch
是个例外。
您可以按如下方式抛出异常:
throw new InvalidInputException("Invalid value for username");
在捕获到异常时使用InnerException
属性,但是您希望将其包装在您自己的异常中以提供更准确的异常信息,例如,这会为“Age”验证string
值:
public static class Validation
{
public void ThrowIfAgeInvalid(string ageStr)
{
int age;
try
{
// Should use int.TryParse() here, I know :)
age = int.Parse(ageStr);
}
catch (Exception ex)
{
// An InnerException which originates to int.Parse
throw new InvalidInputException("Please supply a numeric value for 'age'", ex);
}
if (age < 0 || age > 150)
{
// No InnerException because the exception originates to our code
throw new InvalidInputException("Please provide a reasonable value for 'age'");
}
}
}
这样在调试时你仍然可以参考问题的原因。