【问题标题】:StatusCode: 405, ReasonPhrase: 'Method Not Allowed'状态码:405,原因短语:'方法不允许'
【发布时间】:2019-11-07 19:58:48
【问题描述】:

我正在构建一个 Web 应用程序来使用一个 REST FULL API ASP.Net 核心 Web 服务,我在更新记录时遇到问题。 我正在尝试通过 ASP.Net Core 应用程序从 API ASP.Net 核心调用 Put 方法

我遇到了 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: 'Method Not Allowed',版本:1.1等
  • myURI/employee/{id}这条路线..我能看到那个api端点的方法吗?

标签: asp.net-mvc api asp.net-core core-api


【解决方案1】:

我稍微清理了你的代码。试试这个方法

我删除了不必要的 using 块,并使用单个“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...我已修复它.. Script 的大写 S
  • 请记住,我们可能需要将我的代码从 var request = new HttpRequestMessage(HttpMethod.Post, $"myURI/employee/{id}") 更改为 var request = new HttpRequestMessage(HttpMethod.Put, $"myURI/employee/{id}")
  • 一切正常,jPhizzle,非常感谢
  • 这是解决问题的原因 -var request = new HttpRequestMessage(HttpMethod.Put, $"webapdefirst2019031.azurewebsites.net/api/employee{employee.EmployeeId}") 我必须添加员工 ID 才能更新记录。
  • 我刚刚将您的答案标记为正确,但答案如何?
猜你喜欢
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2017-06-15
  • 2020-04-29
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多