这个问题是为了验证这里的自定义错误处理实现,或者是否有更好的解决方法?
您还有其他最好的方法可以建议吗?
我在 F# 中使用 Suave 和 Asp.Net 核心和红隼服务器来构建微服务。我想为使用微服务的 restful api 的客户端的特定服务器端错误添加 http 状态代码和错误消息。
我有以下代码。
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
- 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 最适合代码错误。