假设我将以下代码放在ASP.NET MVC站点的Master页面中:
throw new ApplicationException("TEST");
Run Code Online (Sandbox Code Playgroud)
即使我的控制器上放置了[HandleError]属性,此异常仍会冒泡.我该如何处理这样的错误?我希望能够路由到错误页面,仍然能够记录异常详细信息.
处理这类事情的最佳方法是什么?
编辑:我正在考虑的一个解决方案是添加一个新的控制器:UnhandledErrorController.我可以在Global.asax中放入Application_Error方法,然后重定向到此控制器(它决定如何处理异常)?
注意:customErrors web.config元素中的defaultRedirect不传递异常信息.
我理解"new"关键字如何隐藏派生类中的方法.但是,它对实现使用关键字的接口的类有什么影响?
考虑这个例子,我决定通过使其属性读/写来扩展接口.
public interface IReadOnly {
string Id {
get;
}
}
public interface ICanReadAndWrite : IReadOnly {
new string Id {
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以做到这样的事情:
public IReadOnly SomeMethod() {
// return an instance of ICanReadAndWrite
}
Run Code Online (Sandbox Code Playgroud)
这是不好的设计吗?它会导致我的类实现ICanReadAndWrite的问题吗?
编辑: 这是一个人为的例子,说明我为什么要这样做:
假设我有一个返回IShoppingCartItemReadWrite的工厂类.然后,我可以有一个服务层来操作它的价格,更改东西等.然后,我可以将这些对象作为IShoppingCartItemReadOnly传递给某种不会改变它们的表示层.(是的,我知道它在技术上可以改变它们 - 这是一个设计问题,而不是安全性等)