C#学习教程:在服务器上运行webapi时出现HTTPErrorexception与在本地运行时没有消息它有3个控制器,所有3个控制器都可用于从我的应用程序中的调用访问webapi。我有一个错误,我的控制器的基类将其功能公开,而不是受保护。这导致服务器抛出一个InternalServerError500(因为无效异常“发现多个与请求匹配的动作”)被抛出。我花了一些时间来深入研究它,因为它从未触发我的webapi的日志记录。从这里的讨论中,我发现错误发生在Application_Error函数捕获它并记录它之前。所以我将以下代码添加到我的webapi的global.asax中,现在我可以记录这样的错误。但是,我现在的问题是,当我在运行我的webapi的本地计算机上收到内部服务器错误500时,我得到了一个日志,我希望看到它是“ExceptionMessage”“找到与请求匹配的多个操作”拼写为原因内部服务器错误。但是当将这个确切的代码部署到服务器并从那里使用webapi时,我的日志只显示“消息”:“发生错误”并且没有向我显示“ExceptionMessage”,即使我可以看到正在抛出异常使用PerfView。我只需要能够让我的服务器日志显示与我的本地日志显示相同的信息。公共类ResponseExceptionTrapper:DelegatingHandler{protectedoverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){returnbase.SendAsync(request,cancellationToken).ContinueWith(response=>{varresult=response.Result;if(!result.IsSuccessStatusCode){varexceptionResult=string.Format("响应异常:rnPath({0})rnStatus({1})rn",request.RequestUri,result.StatusCode);if(result.Content!=null){varexceptionReadTask=result.Content.ReadAsStringAsync();exceptionReadTask.Wait();exceptionResult+="Message:"+exceptionReadTask.Result;}//使用exceptionResultexceptionResult.Log();}returnresult;},cancellationToken);}服务器日志显示示例:时间戳:4/24/201412:24:40PM消息:时间戳:4/24/20144:24:40PM消息:响应异常:路径(http://webserver/CreditReporting/Api/RetrieveQueuedPullCreditReport)状态(InternalServerError)消息:{“Message":"发生错误。"}本地日志示例:时间戳:4/24/201412:03:16PM消息:时间戳:4/24/20144:03:16PM消息:响应异常:路径(http://localhost:XXXXX/Api/RetrieveQueuedPullCreditReport)Status(InternalServerError)Message:{"Message":"Anerrorhasoccurred.","ExceptionMessage":"Multipleactionswerefoundthatmatchtherequest:rnSystem.Threading.Tasks复制代码.Task`1[Our.WebServices.CreditReporting.Contracts.RetrieveQueuedPullCreditReportResponse]Post我发现需要在webapi本身的GlobalConfiguration中开启这些:1:config.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.LocalOnly;2:config.IncludePolicy.IncludeErrorDetailPolicy;Dconfig.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Never;服务器实际上决定显示多少细节,默认为LocalOnly我们的日志记录方法不被认为是本地的,我猜是因为它实际上并没有内置到API本身,而是因为它在多个API之间共享的dll中。我发现这篇文章非常有帮助。我用过这个:GlobalConfiguration.Configuration.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Always;在GlobalofAPI中,它起作用了。以上就是C#学习教程的全部内容:服务器上运行webapi出现HTTPErrorException,本地运行不显示消息。如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
