我创建了一个移动应用程序服务并将其托管在Azure上。 有时特定的代码行会引发异常,而我没有处理这些异常。相反,我将它们记录在ExceptionFilterAttribute中。
我面临的问题是,这些异常被报告为Azure App Service未处理,我认为这是事实。我的问题是,如何改进下面的代码行,使其不会被视为未处理的异常?
public async Task<SingleResult<DTO.Responses.User>> GetUser(string id, OS os = OS.iOS, string openUrl = null)
{
/* some code written here that sometimes throws exception */
}
如果我添加try ... catch块,那么Mobile App同步框架将如何处理?
下面是异常过滤器的代码
public class UnhandledExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
/* Log exception here*/
}
}
答案 0 :(得分:0)
根据我的知识,我们可以使用global error处理。
我们可以从此tutorial获取以下演示代码。
public class TraceSourceExceptionLogger : ExceptionLogger
{
private readonly TraceSource _traceSource;
public TraceSourceExceptionLogger(TraceSource traceSource)
{
_traceSource = traceSource;
}
public override void Log(ExceptionLoggerContext context)
{
_traceSource.TraceEvent(TraceEventType.Error, 1,
"Unhandled exception processing {0} for {1}: {2}",
context.Request.Method,
context.Request.RequestUri,
context.Exception);
}
}
config.Services.Add(typeof(IExceptionLogger),
new TraceSourceExceptionLogger(new
TraceSource("MyTraceSource", SourceLevels.All)));
然后我们可以在ConfigureMobileApp方法中对其进行配置
Public static void ConfigureMobileApp(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.Services.Add(typeof(IExceptionLogger),
new TraceSourceExceptionLogger(new
TraceSource("MyTraceSource", SourceLevels.All)));
new MobileAppConfiguration()
.UseDefaultConfiguration()
.ApplyTo(config);
...
app.UseWebApi(config);
}