Search code examples
c#asp.net-mvcasp.net-coreasp.net-web-apirazor

OnPost for Razor Page


I am trying to convert my MVC to razor page.

This is my sample code for MVC

public ActionResult Register(Member member)
    {            
        if (ModelState.IsValid)
        {                 
            using (var client = new HttpClient())
            {
                 client.BaseAddress = new Uri(baseUrl);
                 var postTask = client.PostAsJsonAsync("Member", member);
                 postTask.Wait();
                 var result = postTask.Result;
                 if (result.IsSuccessStatusCode)
                 {
                     return RedirectToAction("Index", "Home");
                 }    
            }  
       }
       return View(member);
    }

This is what I have converted to Razor page so far

public IActionResult OnPost(Member member)
    {
        if (ModelState.IsValid)
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(baseUrl);
                var postTask = client.PostAsync("Member", member);
                postTask.Wait();
                var result = postTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    return RedirectToPage("~/Index");
                }
            }
        }
        return Page(member);
    }

But at this line at Razor page

var postTask = client.PostAsync("Member", member);

It shows me the error

Cannot convert from 'Models.Member' to 'System.Net.Http.Httpcontent'

May I know how to solve this? I'm not sure what am I supposed to replace the word member


Solution

  • In .net core post async, the httpcontent parameter contains the request body. You should format the data you're about to submit like this;

    var content = new StringContent(JsonConvert.SerializeObject(member), UnicodeEncoding.UTF8, "application/json");
    var postTask = client.PostAsync("Member", content);