Exemple #1
0
        public async Task <string> Post()
        {
            var parsedRequest = new JObject();
            var result        = "ok";

            try
            {
                using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
                {
                    var request = await reader.ReadToEndAsync();

                    try
                    {
                        parsedRequest = JObject.Parse(request);
                    }
                    catch
                    {
                        throw new JsonReaderException("Не удалось преобразовать JSON");
                    }
                }

                // await Response.Body.WriteAsync(Encoding.UTF8.GetBytes("ok"));

                if (parsedRequest["type"] == null)
                {
                    throw new Exception("Запрос не имеет свойство type");
                }

                //Проверка Secret Key
                var config = Configuration.GetInstance();
                if (!string.IsNullOrEmpty(config.GetConfig("vkSecretKey")))
                {
                    if (parsedRequest["secret"].ToString() != config.GetConfig("vkSecretKey"))
                    {
                        //Ключи неверные
                        _logger.Log(LogLevel.Warning,
                                    "Request from undefined server. Secret keys does not match. Server IP: " +
                                    this.Request.Host.Host +
                                    Environment.NewLine +
                                    "Request: " + parsedRequest.ToString());
                        Response.StatusCode = 403;

                        return("Forbidden");
                    }
                }


                switch (parsedRequest["type"].ToString())
                {
                case "confirmation":
                    result = VkHelper.GetConfirmationToken();

                    break;

                case "message_new":
                    handleNewMessage(parsedRequest["object"]);

                    break;

                default:
                    throw new Exception("Неопознанный тип запроса: " + parsedRequest["type"]);
                }
            }
            catch (Exception e)
            {
                //Что-то сломалось
                result = e.Message;

                _logger.Log(LogLevel.Error, e.Message);
            }

            return(result);
        }