Десериализация текущего массива JSON для выполнения операции редактирования с использованием веб-API - PullRequest
0 голосов
/ 03 апреля 2019

Я использую веб-API для редактирования значений из коллекции в MongoDB. Я добавил код для получения значений из mongodb и вызвал его в другом для получения API для выполнения функций редактирования.

Мой идентификатор полученпередано действию, и все еще нулевое исключение ссылки происходит, когда я исправляю это, десериализовать ошибку массива происходит.Я пытался поставить десериализацию массива, используя код, найденный в сети, но это не сработало!Почему возникает эта ошибка?Я новичок в веб-API и Монго DB!Пожалуйста, помогите!

Contact.cs (класс модели)

public class Contact
{
    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
}

mongodbcontroller (контроллер)

        [System.Web.Http.HttpPut]
            public Contact Edit(Contact contact)
            {
                var contactsList = mongoDatabase.GetCollection("contact");
                WriteConcernResult result;
                bool hasError = false;

                string errorMessage = string.Empty;
                try
                {
                    if (!string.IsNullOrEmpty(contact.Id))
                    {
                        IMongoQuery query = Query.EQ("Id", contact.Id);
                        IMongoUpdate update = MongoDB.Driver.Builders.Update
                            //.Set("Id",contact.Id)
                            .Set("Name", contact.Name)
                            .Set("Address", contact.Address)
                            .Set("Phone", contact.Phone)
                            .Set("Email", contact.Email);
                        result = contactsList.Update(query, update);
                        contactsList.Save(contact);

                        hasError = result.HasLastErrorMessage;
                    }
                }
                catch(Exception ex)
                {
                    errorMessage = ex.ToString();
                }


                if (!hasError)
                {
                    return contact;
                }
                else
                {
                    throw new HttpResponseException(HttpStatusCode.InternalServerError);
                }
            }

TestController (использует API)

     public ActionResult Edit(string id)
        {
            //Contact contact = new Contact();
            Contact contact = new Contact();
            try
            {
                using (var client = new HttpClient())
                {


                    client.BaseAddress = new Uri("http://localhost:61093/api/MongoDb/edit");
                    //HTTP GET
                    var responseTask = client.GetAsync("?id=" + id);
                    responseTask.Wait();

                    var result = responseTask.Result;

                    if (result.IsSuccessStatusCode)
                    {

                        var readTask = result.Content.ReadAsAsync<Contact>();
                        readTask.Wait();

                        contact = readTask.Result;
                    }
                }
            }
            catch (Exception ex)
            {

            }


            return View(contact);


        }

    [HttpPost]
    public ActionResult Edit(Contact contact)
    {

        try
        {
            using (var client = new HttpClient())
            {

                client.BaseAddress = new Uri("http://localhost:61093/api/MongoDb/edit");
                //HTTP GET
                var putTask = client.PutAsJsonAsync<Contact>("contact",contact);
                putTask.Wait();

                var result = putTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    return RedirectToAction("Index");
                }                     
            }
        }
        catch (Exception ex)
        {

        }


        return View(contact);

    }

Edit.cshtml (View)


    @model TestApi.Models.Contact

  @{
      ViewBag.Title = "Edit";
  }

  <h2>Edit</h2>


  @using (Html.BeginForm())
  {
      @Html.AntiForgeryToken()

      <div class="form-horizontal">
          <h4>Contact</h4>
          <hr />
          @Html.ValidationSummary(true, "", new { @class = "text-danger" })
          @Html.HiddenFor(model => model.Id)

          <div class="form-group">
              @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
              <div class="col-md-10">
                  @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                  @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
              </div>
          </div>

          <div class="form-group">
              @Html.LabelFor(model => model.Address, htmlAttributes: new { @class = "control-label col-md-2" })
              <div class="col-md-10">
                  @Html.EditorFor(model => model.Address, new { htmlAttributes = new { @class = "form-control" } })
                  @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" })
              </div>
          </div>

          <div class="form-group">
              @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
              <div class="col-md-10">
                  @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                  @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
              </div>
          </div>

          <div class="form-group">
              @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
              <div class="col-md-10">
                  @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
                  @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
              </div>
          </div>

          <div class="form-group">
              <div class="col-md-offset-2 col-md-10">
                  <input type="submit" value="Save" class="btn btn-default" />
              </div>
          </div>
      </div>
  }

  <div>
      @Html.ActionLink("Back to List", "Index")
  </div>

  @section Scripts {
      @Scripts.Render("~/bundles/jqueryval")
  }

Скриншоты моего кодарасположено ниже 1 2 3 4

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