2

这个问题是为了验证这里的自定义错误处理实现,或者是否有更好的解决方法?

您还有其他最好的方法可以建议吗?

我在 F# 中使用 Suave 和 Asp.Net 核心和红隼服务器来构建微服务。我想为使用微服务的 restful api 的客户端的特定服务器端错误添加 http 状态代码和错误消息。

我有以下代码。

  1. Startup.fs 代码 ==>

      member this.Configure(app: IApplicationBuilder, env: IHostingEnvironment, loggerFactory: ILoggerFactory) = 
    
            app.UseSuaveErrorHandler(ConfigApp.ErrHandler) |> ignore 
            <TODO> 
    

  type ConfigApp () = 
    static member ErrHandler (ex:exn) (message:string) (httpContext:HttpContext) = 

    let logRepository = 
    log4net.LogManager.GetRepository(Assembly.GetEntryAssembly()) 
    log4net.Config.XmlConfigurator.Configure(logRepository, 
    FileInfo("log4net.config")) |> ignore 
    FloLogger.debug "Exception= %s" ex.Message 
    FloLogger.debug "Exception= %s" ex.StackTrace 

    match ex.Message with 
        | x -> INTERNAL_ERROR ("Custom Error Handler: " + ex.Message) httpContext 

  1. InnerMethod fs 文件代码摘录

   let fnGetManufacturerInfoByIdDAL (manufacturerID:string) = 
   try 
       FloLogger.debug "Inside fnGetManufacturerInfoByIdDAL method" 
       printfn "Inside fnGetManufacturerInfoByIdDAL method - %s" manufacturerID 
       use session = objSettings.OpenSession() 
       // Querying database 
       let manufacturerList = session.Load<Manufacturer>((manufacturerID)) 
       manufacturerList.Etag <- session.Advanced.GetEtagFor(manufacturerList); 
       // disposing the opened db session 
       session.Dispose() 
       manufacturerList 
  with 
      | smilie Exception as ex -> FloLogger.debug "%s" ex.Message 
                                FloLogger.debug "%s" ex.StackTrace 
                                let strException = "{\"error occurrred...\":\"error..\"}" + ex.Message 
                                failwith strException 

因此,内部方法文件 get 中的代码引发的异常由 Suave 错误处理程序处理,该错误处理程序发送 http 状态代码和响应中的异常消息,如随附的屏幕截图所示。但是 Suave 可用的服务器错误非常少,其中 Internal_Error 最适合代码错误。

4

0 回答 0