簡體   English   中英

如何從 ASP.NET 核心 mvc 向 ASP.NET 核心中的 Web API 發出 PUT 請求?

[英]How to make a PUT request from ASP.NET core mvc to Web API in asp.net core?

我需要通過數據庫中的 API 調用來保存我在模型中所做的更改。 當我在 Web 上單獨運行它時,我已經檢查過我的 API 工作正常。 但它給了我一個錯誤StatusCode: 405, ReasonPhrase: 'Method Not Allowed' 我正在嘗試發送和反對並嘗試查看所提出的請求是否已完成。 當我嘗試調試它時,它沒有在我的 API 控制器上發送命中。

這是我的模型類:

 public class Customer
    {
        [Required]
        public Guid CustomerId { get; set; }
        public int Age { get; set; }
        public int Phone { get; set; }
    }

API中的PUT方法:

[HttpPut]
        [Route("api/[controller]/{customer}")]
        public IActionResult EditCustomer(Customer customer)
        {
            var cust = _customerData.EditCustomer(customer);
            if (cust == string.Empty)
            {
                return Ok();
            }
            else
            {
                return new StatusCodeResult(StatusCodes.Status500InternalServerError);
            }
        }

我在項目中使用的調用 API 的方法:

 using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(apiBaseUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")
                );
                var sum = await client.PutAsJsonAsync("api/Customer/", customer);
                if (sum.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    
                    return RedirectToActionPermanent(actionName: "SingIn");
                }
                else
                {
                    TempData["msg"] = "There is an error";
                    return View();
                }

其中基地址= {https://localhost:44398/}

您需要通過刪除 {Customer} 來修復您的操作路由,因為您在請求正文中發送客戶,而不是作為路由值

 [Route("~/api/Customer")]

並要求

  var sum = await client.PutAsJsonAsync("/api/Customer", customer);

或者更好地將動作路線名稱修復為有意義的

  [Route("~/api/EditCustomer")]

var sum = await client.PutAsJsonAsync("/api/EditCustomer", customer);

AsJsonAsync 有時會導致問題

試試這個代碼

var json = JsonSerializer.Serialize(customer);
//or if you are using Newtonsoft
var json = JsonConvert.SerializeObject(customer);

var contentData = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PutAsync("/api/Customer", contentData);
              
if (response.IsSuccessStatusCode)
    return RedirectToActionPermanent("SingIn");
else
{
 TempData["msg"] = "There is an error";
 return View();
}

但恕我直言,我更願意使用

client.PostAsync("/api/EditCustomer", contentData); 

而不是放置。

並將 [FromBody] 添加到操作中

 [HttpPost("~/api/EditCustomer")]
 public IActionResult EditCustomer([FromBody] Customer customer)

我不是 Web API 的專家,但我懷疑這可能是因為 API 期望customer在請求 URL 中。

嘗試將 API 路由更改為[Route("api/[controller]")]

這可能是一個評論,但我沒有足夠的聲譽:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM