Member 12749751 Ответов: 1

Когда я вызываю rest api он вызывает дважды для каждого запроса


Я создал веб-API и пытаюсь использовать его в веб-приложении MVC ,но методы веб-api вызывают дважды для каждого запроса, приложение MVC запрашивает только один вызов веб-api

Что я уже пробовал:

Метод Веб-Api :
[HttpPost]
        [Route("SaveClientDetails")]
        public async Task<httpresponsemessage> AddNewClient([FromBody]usp_GetClientDetails client)
        {
            try
            {
                usp_GetClientDetails result = new usp_GetClientDetails();
                await Task.Run(() =>
                {
                    result = IClientRepository.InsertClientDetails(client);
                });
                return Request.CreateResponse(HttpStatusCode.OK, new { StatusCode = HttpStatusCode.OK, Status = "Success", Data = result });
            }
            catch (Exception ex)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound, new { StatusCode = HttpStatusCode.InternalServerError, Status = "Failed", Data = ex.Message });
            }
        }
Клиент, вызывающий веб-API:
[HttpPost]

        public ActionResult AddClient(ClientAddModel objcltModel)
        {
            var parameters = new usp_GetClientDetails
            {
                ClientMappedTo=Convert.ToInt32(objcltModel.ClientMappedTo),
                UserName="",
                FirstName=objcltModel.FirstName,
                LastName= objcltModel.LastName,
                EmailId= objcltModel.EmailId,
                PrimaryContactNo= objcltModel.PrimaryContactNo,
                SecondaryContactNo= objcltModel.SecondaryContactNo,
                QRCode=Common.CreateQRCodeWithContact(objcltModel.PrimaryContactNo),
                AadharNo= objcltModel.AadharNo,
                PanNo= objcltModel.PanNo,
                Pincode= objcltModel.Pincode,
                City= objcltModel.City,
                IsActive=true,
                CreatedDate=DateTime.Now,
                Deposit=objcltModel.Deposite,
                Area1= objcltModel.Area1,
                Area2= objcltModel.Area2,
                FloorNo= Convert.ToInt32(objcltModel.FloorNo),
                FlatNo= objcltModel.FlatNo,
                BuildingName= objcltModel.BuildingName,
                Rate=objcltModel.Rate

            };
            var result = WebAPIGeneric.GetAPIResponse(WebAPIMethods.SaveClientDetails, parameters, Method.POST, null);
            if(result !=null)
            {
                if(result.Status=="Success")
                {
                    ViewBag.Message = "Client Added Successfully";//JsonConvert.DeserializeObject<usp_getclientdetails>(result.Data.ToString()).Message;
                }
            }
            ViewBag.Userlst = getUserList() == null ? new SelectList(string.Empty) : new SelectList(getUserList().ToList(), "UserId", "FullName");
            return View("Index");
        }
GetAPIResponseMethod :
public static ResponseModel GetAPIResponse(string Url, object data, Method method,Hashtable htable)
        {
            var client = new RestClient(Common.baseUrl);
            var request = new RestRequest(Url, method);
            if(data==null && htable !=null)
            {
                foreach(DictionaryEntry entry in htable)
                {
                    request.AddParameter(entry.Key.ToString(),entry.Value.ToString());
                }
                
                //request.AddParameter("application/json", JsonConvert.SerializeObject(htable), ParameterType.QueryString);
            }
            else
            {
                request.AddJsonBody(JsonConvert.SerializeObject(data));
            }
            
            var x = client.Execute(request);
            return JsonConvert.DeserializeObject<responsemodel>(client.Execute(request).Content);
        }
Класс Модели Ответа:
public class ResponseModel
    {
        public int StatusCode { get; set; }

        public string Status { get; set; }

        public object  Data { get; set; }
    }

Afzaal Ahmad Zeeshan

Лучше всего было бы отладить функцию и пройти через нее строчку за строчкой. Только тогда вы сможете увидеть, когда будет сделан HTTP-запрос.

Игнорируйте комментарий, пожалуйста, смотрите Решение 1.

1 Ответов

Рейтинг:
0

Afzaal Ahmad Zeeshan

Это было легко угадать, потому что вы отправляете запрос 2 раза.

var x = client.Execute(request); // <-- first call
return JsonConvert.DeserializeObject<ResponseModel>(client.Execute(request).Content); // <-- Second one here
Вам нужно использовать,
var x = client.Execute(request);
return JsonConvert.DeserializeObject<ResponseModel>(x.Content); // Use the x here
Это не вызовет запрос только один раз и не будет использовать результат этого запроса.

Кроме того, Пожалуйста, извините за любые ошибки на основе SDK, так как я написал этот код с самого начала, так что, возможно, возникнут проблемы со структурой кода-также я не знаю об этой библиотеке.