私はこれを直近の4時間修正しようとしています。エラー500 Web API
私は、新しいWeb APIのプロジェクトがある - 、開発に100%の罰金を作品
しかし、私は500 Internal Server Error
を取得し、ライブサーバー上。
新しいバージョンを展開し、直接http://URL/Action
にリクエストを送信するとエラーが発生します。 BUT 最初にhttp://URL/
に行き、POSTリクエストをhttp://URL/Action
に送信すると動作します。 POST
要求を送信、その後、http://URL/Action
を:それは私が開く必要があります最初の仕事はとてもために12,13 hours
のためのAPIへの要求がないとき
同じことが当てはまります。
だから、プロジェクトが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;
さらにこれをth電子web.config
ファイル
<customErrors mode="Off"/>
しかし、私は郵便配達で取得エラーは次のようになります。そして、もし
:
は、私がブラウザでURL.comに移動した後、 POSTリクエストを送信します。
EDIT:
これは私の例外ハンドラ属性です:
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)
{
}
}
それでは、この属性がすべきdoはログファイルに例外を記録する - テストされているもの開発版と配備版の両方で
しかし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は問題の1つです。私は完全な例外を得ることができません。 –