我一直试图解决这个过去的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这是我的问题之一我有我不能得到完整的异常 –