【问题标题】:Handling exceptions during localizing in .net5在 .net5 中本地化期间处理异常
【发布时间】:2021-05-15 09:19:31
【问题描述】:

我想问一下本地化过程中是否可以处理异常?例如,我最近在我的 resx 文件中犯了错误,我的本地化程序导致在一种语言中用户出错(在翻译版本中,我写了类似“foo {2} bar”而不是“foo {0} bar”的内容。我会喜欢处理本地化程序返回“未翻译”字符串的异常。

是否可以为本地化程序编写某种特殊的异常处理程序?它应该实现任何接口还是什么?

非常感谢您的回答。

【问题讨论】:

    标签: c# asp.net-core error-handling asp.net-core-localization


    【解决方案1】:

    我认为您可能需要使用 OnResourceExecuted() 自定义资源过滤器。

    过滤器类型

    每个过滤器类型在过滤器管道的不同阶段执行:

    • 授权过滤器

    先运行,用于判断用户是否被授权请求。如果请求未被授权,授权过滤器会短路管道。

    • 资源过滤器

    授权后运行。
    OnResourceExecuting 在过滤器管道的其余部分之前运行代码。例如,OnResourceExecuting 在模型绑定之前运行代码。
    OnResourceExecuted 在管道的其余部分完成后运行代码。

    • 动作过滤器

    在调用动作方法之前和之后立即运行代码。
    可以更改传递给动作的参数。可以更改从动作返回的结果。
    Razor 页面不支持。

    • 异常过滤器

    将全局策略应用于在响应正文被写入之前发生的未处理异常。

    • 结果过滤器

    在执行动作结果之前和之后立即运行代码。它们仅在操作方法成功执行时运行。它们对于必须围绕视图或格式化程序执行的逻辑很有用。

    The following diagram 显示过滤器类型如何在过滤器管道中交互。

    【讨论】:

      【解决方案2】:

      我使用一种更简单的方法,没有任何中间件,我将异常消息翻译成本地化字符串,如下所示,

      使用原始异常消息调用您的 catch 中的方法 捕获(异常索引)

          {
      
              return Json(new { success = false, responseText = Models.SiteUtils.FriendlyErrorMessage(dex) });
          }
      

      错误消息的本地化方法,将搜索异常消息并获取您的版本, 注意我使用 Message.Contains(x.OriginalError) 所以我不需要完全翻译他的整个消息,如果你需要根据自己的逻辑,你可以决定使用完全匹配

       public static string FriendlyErrorMessage(Exception dex)
              {
                  var Message = dex.Message;
                  var listOfStrings = new tblErrorMsgMappingVM().GetAll().ToList();
      
      
                  var ErrorMessage = listOfStrings.Find(x => Message.Contains(x.OriginalError));
      
                  if (ErrorMessage != null)
                  {
                      Message = ErrorMessage.ErrorMessage;
      
                  }
                  else
                      Message = "Unknown Error ,pelase review the log";
                 
                  var value = new tblLocalizationRecordsVM().GetResourceValue(Message, "ErrorMsg");
                  return value;
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 2019-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-29
        相关资源
        最近更新 更多