我一直試圖解決這個過去的4個小時。錯誤500 Web API
我有一個新的Web API項目 - 該工程對發展精細100%,
但活的服務器上,我收到了500 Internal Server Error
。
當我部署新版本並直接向http://URL/Action
發送請求時,出現錯誤。 但是 如果我先去http://URL/
然後發送POST請求到http://URL/Action
,它的工作原理。
同樣是這樣,當存在於API沒有請求12,13 hours
所以爲它工作第一我都開:http://URL/Action
,然後發送POST
請求。
因此該項目使用Ninject
,這是Startup.cs
using System.Collections.Generic;
using System.Reflection;
using System.Web.Http;
using API.MyApi;
using Business.Bindings;
using Microsoft.Owin;
using Ninject;
using Ninject.Modules;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;
[assembly: OwinStartup(typeof(Startup))]
namespace API.MyApi
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
app.UseNinjectMiddleware(CreateKernel);
app.UseNinjectWebApi(config);
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
}
private static StandardKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
var modules = new List<INinjectModule>
{
new BusinessBindings(),
new DataBindings()
};
kernel.Load(modules);
return kernel;
}
}
}
而且WebAPI Config
using System.Web.Http;
namespace API.MyApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.XmlFormatter.UseXmlSerializer = true;
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
}
}
}
我曾嘗試加入這行代碼來獲取整個錯誤消息的看法:
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
並且還將其添加到第Ëweb.config
文件
<customErrors mode="Off"/>
但我在郵遞員得到的錯誤是:
後,我瀏覽到URL.com在瀏覽器:
然後如果我發送POST請求:
編輯:
這是我的異常處理程序屬性:
public class ExceptionHandlerAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var exception = actionExecutedContext.Exception;
using (var exceptionLogger = new CustomLogger("Exceptions"))
{
exceptionLogger.LogExceptionMessage(exception.Message, exception.InnerException, exception.StackTrace);
}
base.OnException(actionExecutedContext);
}
}
和控制器裝飾有屬性:
[ExceptionHandler]
public class SmartOneCController : BaseApiController
{
public SmartOneCController(CustomLogger logger)
{
}
}
那麼這個屬性應該將異常記錄到日誌文件 - 正在測試在開發和部署版本上。
但沒有記錄從500 Internal Server Error
控制器代碼例外,我沒有看到控制器代碼將如何幫助這裏,因爲一切都逛API的基礎URL之後的工作原理:URL.com
後,我可以調用這個POST方法,一切正常。
[ExceptionHandler]
public class SmartOneCController : BaseApiController
{
public SmartOneCController(CustomLogger logger, IAssetsProvider assetsProvider, ISatelliteTrackerProvider satelliteTrackerProvider) : base(logger, assetsProvider, satelliteTrackerProvider)
{
}
public void Post(HttpRequestMessage request)
{
try
{
// Reading data as XML string to log to files - In case message structure is changed
var xmlDoc = new XmlDocument();
xmlDoc.Load(request.Content.ReadAsStreamAsync().Result);
var str = xmlDoc.InnerXml;
_logger.LogMessage(MessageType.Information, string.Format("RAW XML Message: {0}", str));
// Convert to model
var model = XMLHelper.FromXml<trackermessages>(str);
......
請發佈記錄的錯誤的適當的異常詳細信息(名稱,消息,堆棧跟蹤)。沒有這些信息,你的問題就模糊不清。 – Steven
您可以添加全局ExceptionLogger來記錄實時服務器上發生的實際異常嗎?你可以找到有關如何在這裏做的信息:http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling – Pedro
@Steven這是我的問題之一我有我不能得到完整的異常 –