Я создаю веб-приложение для использования REST FULL API ASP.Net Core Web Service, у меня проблема, когда я обновляю записи. я пытаюсь вызвать метод Put из ядра API ASP.Net с помощью приложения ASP.Net Core
У меня есть исключение NullReferenceException: ссылка на объект не указывает на экземпляр объекта.
public async Task<IActionResult> UpdateEmployee(int id)
{
Employee employee = new Employee();
using(var httpClient=new HttpClient())
{
using(var response = await httpClient.GetAsync("myURI/employee/" + id))
{
string apiResponse = await
response.Content.ReadAsStringAsync();
employee = JsonConvert.DeserializeObject<Employee>apiResponse);
}
}
return View(employee);
}
[HttpPost]
public async Task<IActionResult> UpdateEmployee(Employee employee)
{
Employee receivedemployee = new Employee();
using(var httpClient=new HttpClient())
{
var content = new MultipartFormDataContent();
content.Add(new
StringContent(employee.EmployeeId.ToString(),Encoding.UTF8,
"application/json"), "id");
content.Add(new
StringContent(employee.FirstName,Encoding.UTF8,
"application/json"),"FirstName");
content.Add(new StringContent(employee.LastName,
Encoding.UTF8, "application/json"), "LastName");
content.Add(new StringContent(employee.DateOfBirth.ToString(),
Encoding.UTF8, "application/json"), "Email");
content.Add(new StringContent(employee.PhoneNumber,
Encoding.UTF8, "application/json"), "DateOfBirth");
content.Add(new StringContent(employee.Email, Encoding.UTF8,
"application/json"), "Email");
using (var response = await httpClient.PutAsync("myURI/api/employee", content))
{
string apiResponse = await response.Content.ReadAsStringAsync();
ViewBag.Result = "Success";
receivedemployee = JsonConvert.DeserializeObject<Employee>(apiResponse);
}
return View(receivedemployee);
}
}
}
я ожидал обновления записи
я также не думаю, что вам нужно использовать ответ... я попытаюсь немного очистить ваш код и поместить его в ответ
у меня ошибка в представлении.
все работает хорошо, но только когда я обновляю запись, я получаю сообщение об ошибке, значение переменной ответа, когда я приостанавливаю отладку, равно {StatusCode: 405, ReasonPhrase: «Метод не разрешен», версия: 1.1 и т. д.
myURI/employee/{id} этот маршрут. Могу ли я увидеть метод для этой конечной точки API?
попробуйте изменить атрибут HttpPost на HttpPut.
ок попробую щас
также я не думаю, что вам нужны два метода, чтобы сделать это... может быть, объединить их... давайте посмотрим, дайте мне секунду, хорошо
я изменил атрибут [HttpPost] на [HttpPut] для метода UpdateEmployee и не работал, метод с [HttpPut] не был отлажен компилятором
первый метод UpdateEmployee для получения данных и отображения их в представлении и второй метод UpdateEmployee с атрибутом [HttpPost] для обновления данных.





Я немного подчистил ваш код. попробуй так
Я удалил ненужные блоки использования и сериализовал ваш класс сотрудников с помощью одной кодировки «application/json».
public async Task<IActionResult> UpdateEmployee(int id)
{
Employee employee = new Employee();
var httpClient = new HttpClient();
var request = new HttpRequestMessage
(HttpMethod.Get, $"myURI/employee/{id}");
var response = await httpClient.SendAsync(request);
string apiResponse = await response.Content.ReadAsStringAsync();
employee = JsonConvert.DeserializeObject<Employee>(apiResponse);
return View(employee);
}
[HttpPost]
public async Task<IActionResult> UpdateEmployee(Employee employee)
{
Employee receivedEmployee = new Employee();
var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, $"myURI/employee/{employee.EmployeeId}")
{
Content = new StringContent(new JavaScriptSerializer().Serialize(employee), Encoding.UTF8, "application/json")
};
var response = await httpClient.SendAsync(request);
string apiResponse = await response.Content.ReadAsStringAsync();
ViewBag.Result = "Success";
receivedEmployee = JsonConvert.DeserializeObject<Employee>(apiResponse);
return View(receivedEmployee);
}
извините, я неправильно написал JavaScriptSerializer... я исправил это.. заглавная буква S для скрипта
имейте в виду, возможно, нам придется изменить мой код с var request = new HttpRequestMessage(HttpMethod.Post, $"myURI/employee/{id}") на var request = new HttpRequestMessage(HttpMethod.Put, $"myURI/employee/{id}")
у меня такая же ошибка. Я пробовал использовать оба метода (post и put). NullReferenceException: ссылка на объект не указывает на экземпляр объекта. AspNetCore.Views_Home_UpdateEmployee.ExecuteAsync() в UpdateEmployee.cshtml + <td>@Model.EmployeeId</td>
идентификатор во втором методе сделал проблему. var request = new HttpRequestMessage(HttpMethod.Put, $"webapicodefirst20190620092631.azurewebsites.net/api/employee{id}") //<--- Ошибка CS0103 Имя 'id' не существует в текущем контексте
О да извините. Итак, в параметрах рядом с сотрудником укажите int id. Так это будет выглядеть (Employee employee, int id). И не забудьте поставить косую черту в маршруте /employee/{id}
я только что обновил свой ответ ... поэтому мы собираемся получить id из объекта employee, передаваемого с помощью employee.Id, и мы собираемся назначить его id, и мы собираемся использовать это id для обновления правильного работник
Теперь все работает, jPhizzle, большое спасибо
это проблема -var request = new HttpRequestMessage(HttpMethod.Put, $"webapdefirst2019031.azurewebsites.net/api/employee{employee.EmployeeId}"). Я должен добавить идентификатор сотрудника, чтобы обновить запись.
Рад слышать! Если это сработает, не могли бы вы сделать мне одолжение и отметить мой ответ как правильный? :)
Я только что отметил ваш ответ как правильный, но каков ответ?
что ты имеешь в виду?
да, что случилось?
в какой строке вы получаете ошибку?