Как создать идентификатор корреляции в веб-API 2 / приложения Insights? - PullRequest
0 голосов
/ 08 мая 2019

Я использую App Insights в своем проекте web api 2, который называется из React Front End.

Когда что-то не так, я хотел бы показать пользователю общую ошибку, такую ​​как: Пожалуйста, свяжитесь с администратором и покажите ему Guid или номер ошибки.

Затем с этим номером ошибки я мог проверить в App Insights, каково было настоящее исключение.

Возможно ли это?

Мой веб-API-код ниже

namespace LuloWebApi.Controllers
{
    [Authorize]
    public class ClientController : ApiController
    {

        [HttpGet]
        public async Task<List<Client>> GetClients()
        {
            //var telemetry = new TelemetryClient();
            //try
            //{
                var clientStore = CosmosStoreHolder.Instance.CosmosStoreClient;
                return await clientStore.Query().ToListAsync();
            //}
            //catch (System.Exception ex)
            //{
            //    telemetry.TrackException(ex);

           //}
        }

        [HttpGet]
        public async Task<IHttpActionResult> GetClient(string clientId)
        {     
            var telemetry = new TelemetryClient();
            try
            {
                var clientStore = CosmosStoreHolder.Instance.CosmosStoreClient;
                var client = await clientStore.Query().FirstOrDefaultAsync(x => x.Id == clientId);
                if (client == null)
                {
                    return NotFound();
                }
                return Ok(client);
            }
            catch (System.Exception ex)
            {
                telemetry.TrackException(ex);
                return BadRequest("Unknown error");
            }
        }

        [HttpPut]
        public async Task<IHttpActionResult> UpdateClient(string id,[FromBody]Client client)
        {

            var telemetry = new TelemetryClient();
            try
            {

                var clientStore = CosmosStoreHolder.Instance.CosmosStoreClient;
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }

                var result = await clientStore.UpdateAsync(client);
                return Ok(result);
            }
            catch (System.Exception ex)
            {
                telemetry.TrackException(ex);
                return BadRequest("Unknown error");
            }
        }


        [HttpPost]
        public async Task<IHttpActionResult> AddCLient([FromBody]Client Client)
        {
            var telemetry = new TelemetryClient();
            try
            {
                var clientStore = CosmosStoreHolder.Instance.CosmosStoreClient;
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }

                var added = await clientStore.AddAsync(Client);
                return StatusCode(HttpStatusCode.NoContent);
            }
            catch (System.Exception ex)
            {
                telemetry.TrackException(ex);
                return BadRequest("Unknown error");
            }

        }



        public async Task<IHttpActionResult> DeleteClient(string clientId)
        {
            var telemetry = new TelemetryClient();
            try
            {

                var clientStore = CosmosStoreHolder.Instance.CosmosStoreClient;
                await clientStore.RemoveByIdAsync(clientId);
                return Ok(clientId);
            }
            catch (System.Exception ex)
            {
                telemetry.TrackException(ex);
                return BadRequest("Unknown error");
            }
        }
    }
}

1 Ответ

2 голосов
/ 09 мая 2019

Пожалуйста, поправьте меня, если я вас неправильно пойму.

Я думаю, что это так же просто, как ручное создание guid, и добавить к телеметрии исключений, а также BadRequest ().

        try
        {
           //some code here
        }
        catch(Exception ex)
        {
            string guid = Guid.NewGuid().ToString();                
            Dictionary<string,string> dt = new Dictionary<string, string>();
            dt.Add("my error number1", guid);

            telemetryClient.TrackException(ex,dt);
            return BadRequest("Unknown error:"+guid);
        }

И когда вы получите guid, вы можете найти соответствующую ошибку на портале Azure:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...