Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在使用外部数据源作为数据存储时遇到错误时,如何防止默认通知?_Asp.net_.net_Asp.net Mvc_Orchardcms_Orchardcms 1.6 - Fatal编程技术网

Asp.net 在使用外部数据源作为数据存储时遇到错误时,如何防止默认通知?

Asp.net 在使用外部数据源作为数据存储时遇到错误时,如何防止默认通知?,asp.net,.net,asp.net-mvc,orchardcms,orchardcms-1.6,Asp.net,.net,Asp.net Mvc,Orchardcms,Orchardcms 1.6,我正在构建一个自定义内容部件,它从外部存储库获取信息,主要遵循find@的建议,并使用自定义处理程序获取数据 使用外部数据存储打开了各种网络异常等的可能性,这将导致底层记录无法保存。但是,如果在ContentHandler中抛出异常,它将被Invoke方法吞没,这样(除非是“致命”异常),用户就不会知道该异常,而AdminController会通知用户“您的{0}已保存。”,而实际上它还没有保存 一个对我来说显而易见的解决方法是以某种方式截获错误并通知我的内容部分的内容驱动程序,这将公开正在执行

我正在构建一个自定义内容部件,它从外部存储库获取信息,主要遵循find@的建议,并使用自定义处理程序获取数据

使用外部数据存储打开了各种网络异常等的可能性,这将导致底层记录无法保存。但是,如果在
ContentHandler
中抛出异常,它将被
Invoke
方法吞没,这样(除非是“致命”异常),用户就不会知道该异常,而
AdminController
会通知用户
“您的{0}已保存。”
,而实际上它还没有保存

一个对我来说显而易见的解决方法是以某种方式截获错误并通知我的内容部分的内容驱动程序,这将公开正在执行的
AdminController
。在这一点上,我可以连接到控制器的
ModelState
并引入一个错误,然后捕获该错误,然后在没有任何误报通知的情况下通知我一个错误


Orchard中还有其他扩展点比通过内容驱动程序更改控制器的
ModelState
更好地处理这种外部访问吗?

最简单的方法是为这些错误实现您自己的、简单的按请求存储对象,即

public interface IErrorLog : IDependency {
    public void Add(string message){ ... }
    public IEnumerable<string> List() { ... }
}

public class DefaultErrorLog : IErrorLog { ... }

    最简单的方法是为这些错误实现您自己的、简单的、按请求的存储对象,即

    public interface IErrorLog : IDependency {
        public void Add(string message){ ... }
        public IEnumerable<string> List() { ... }
    }
    
    public class DefaultErrorLog : IErrorLog { ... }
    

谢谢你的回答。我在这里得到了IoC方法,但在本例中,控制器是
Orchard.Core.Contents.Controllers
中的
AdminController
,因为我正在编辑的项目是一个内容项目。我可以在那里添加依赖项,但我不太愿意这样做,因为这不是通常包含在模块中的东西。我可以在内容驱动程序中完成,但我认为这与我现在尝试的方法相同。从驱动程序中捕获异常并将信息推回到控制器将更容易。在第二个
编辑器
方法(具有3个参数的方法)中,
IUpdateModel
对象实际上是基本控制器对象。只需使用
AddModelError
添加模型错误,就可以了。对,这是我最初的计划。它可以工作,但是(我认为)它有一点代码的味道。这实际上不是一个
ModelError
,而是一个与外部服务相关的连接问题。到目前为止,这是我知道如何“欺骗”AdminController以绕过默认通知操作的唯一方法,因此我的问题更多的是找出是否有更好的方法来完成此操作。同意。如果您需要完全控制,则有一个最终选项可用。请看我的第二次更新。Piotr,非常感谢分享您的建议和想法。在接下来的几天里,我会尝试一下,然后再圈回来,让你知道它是怎么回事。谢谢你的回答。我在这里得到了IoC方法,但在本例中,控制器是
Orchard.Core.Contents.Controllers
中的
AdminController
,因为我正在编辑的项目是一个内容项目。我可以在那里添加依赖项,但我不太愿意这样做,因为这不是通常包含在模块中的东西。我可以在内容驱动程序中完成,但我认为这与我现在尝试的方法相同。从驱动程序中捕获异常并将信息推回到控制器将更容易。在第二个
编辑器
方法(具有3个参数的方法)中,
IUpdateModel
对象实际上是基本控制器对象。只需使用
AddModelError
添加模型错误,就可以了。对,这是我最初的计划。它可以工作,但是(我认为)它有一点代码的味道。这实际上不是一个
ModelError
,而是一个与外部服务相关的连接问题。到目前为止,这是我知道如何“欺骗”AdminController以绕过默认通知操作的唯一方法,因此我的问题更多的是找出是否有更好的方法来完成此操作。同意。如果您需要完全控制,则有一个最终选项可用。请看我的第二次更新。Piotr,非常感谢分享您的建议和想法。在接下来的几天里,我会尝试一下,然后再转回来让你知道它是怎么回事。