asp.net-coredotnet-httpclientwebapipostasync

Post Request responded 500 on HTTPClient in Asp .net Core


Request response:

{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Transfer-Encoding: chunked
  Server: Microsoft-IIS/10.0
  X-Powered-By: ASP.NET
  Date: Mon, 03 Oct 2022 06:47:30 GMT
}}

Here I am requesting an .netCore Web API for saving user information. Where I have Hosted an API in local IIS and its working when I am calling a GetUserList method, but when I am calling SaveUser method with POSTAsync its provide below error. Please help me about this issue. My request Method:

public async Task<IActionResult> SaveUser(string name, string email, string mobile, string address, string passwrod,
            string userrole)
        {
            User usernew = new User();

            usernew.Name = name;
            usernew.Email = email;
            usernew.Mobile = mobile;
            usernew.Address = address;
            usernew.Password = passwrod;
           usernew.UsrRoleId = 1;

            var json2 = JsonConvert.SerializeObject(usernew);
          
            HttpContent postContent = new StringContent(json2, Encoding.UTF8, "application/json");

            HttpResponseMessage response = await client.PostAsync(burl + "User/SaveUser", postContent);

            if (response.IsSuccessStatusCode)
            {
               
            }
            else
            {
               
            }
            return Redirect("Index");
        }

Here I have added API Controller method

API Method contains this code:

[HttpPost]
        [Route("SaveUser")]
        [Consumes("application/json")]
        public IActionResult SaveUser(User user)
        {
            User us = new User();
            us.Name = user.Name;
            us.Email =user.Email;
            us.Mobile = user.Mobile;
            us.Address = user.Address;
            us.Password = PasswordEnc(user.Password);

            _UserRepository.SaveUser(us);            
             return Ok(true);                      
        }

Solution

  • It is better to use client.PostAsJsonAsync as it automatically does the conversion for you to json. You would implement your post request as below:

    User usernew = new User();
    
    usernew.Name = name;
    usernew.Email = email;
    usernew.Mobile = mobile;
    usernew.Address = address;
    usernew.Password = passwrod;
    usernew.UsrRoleId = 1;
    
    var result = await client.PostAsJsonAsync(burl + "User/SaveUser", usernew);