c# .netframework WebAPIで呼び出し元をNLogする

APIで呼び出し元を出力する必要があったのでメモしておく。

System.Collectionsは、nugetでインストールする必要があるかもしれない。
dynamicはstringでキャストしないとExceptionを吐く。

using System.Collections.Generic;

    [RoutePrefix("api")]
    public class ApiTestController : ApiController
    {
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
        private string httpContext = "MS_HttpContext";

        ///         /// ログイン
        /// 
        /// For Debug
        [HttpGet]
        [Route(nameof(Index))]
        public Dictionary<string, string> Index()
        {
            logger.Info("=== Index Controller START");
            dynamic ctx = this.Request.Properties[httpContext];
            if (ctx != null)
            {
                logger.Info("UserHostAddress: {0}", (string)ctx.Request.UserHostAddress);
                logger.Info("UrlReferrer {0}", (string)ctx.Request.UrlReferrer);

                Dictionary<string, string> dict = new Dictionary>string, string<()
                {
                    { "msg", (string)ctx.Request.UserHostAddress },
                };

                return dict;
            }

            return new Dictionary<string, string>()
                {
                    { "msg", "Hello" },
                };
  
参考
• Obtaining the client IP in ASP.NET Web API self hostASP.NET Framework WebAPIでレスポンスをJSON形式に固定する

 

コメント

このブログの人気の投稿

ソリューション構成ごとにconfigファイルを作成する

C++の古いプロジェクトのビルドでerror MIDL2311 : statements outside library block are illegal in mktyplib compatability mode

web.config debug/releaseの内容を変換構文を使って切り替える