Dim
Dim

Reputation: 453

Pass big string in asp net and get answer using json

I'm trying to pass a big string in my controller using json. Also i need Controller to send me an answer.

Here is my controller in web api:

public class CustomersController : ApiController
{
    // GET: api/Customers
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET: api/Customers/5
    public string Get(int id)
    {
        return "value";
    }

    // POST: api/Customers
    public void Post([FromBody]string value)
    {
    }

    // PUT: api/Customers/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE: api/Customers/5
    public void Delete(int id)
    {
    }
}

First of all where i should read my string and where should i send an answer?

And here is my client which try to send a string

using (var client = new HttpClient())
        {
            var response = await client.PostAsync("http://192.168.1.15:8282/",new StringContent("Mystring", Encoding.UTF8, "application/json"));

           if (response.IsSuccessStatusCode)
        {
          string content = await response.Content.ReadAsStringAsync();
        }

I need my web api to read my string, and then to send me an answer

Upvotes: 0

Views: 155

Answers (1)

Marcus H&#246;glund
Marcus H&#246;glund

Reputation: 16801

Instead of having the methods as void you need to return the string value from the controller methods. Also, don't forget to decorate the methods with respective http verb attribubte (HttpGet, HttpPost, HttpPut etc.) which the method is responsible to serve.

Here's an example where the method returns an Ok result, this generate an http status code 200 with the string in the response body

[HttpPost]
public IHttpActionResult Post([FromBody]string value)
{
    return Ok(value);
}

Then for the client call. First of, you need to specify the route to the controller correctly

192.168.1.15:8282/api/Customers

Then, sending a single string as content when using the content-type of application/json is not suitable as json always start parsing from an object {} or array []. The easiest way of sending a single string is therefore to just change the content type to application/x-www-form-urlencoded and adding a = sign infront of the string

using (var client = new HttpClient())
{
    var response = await client.PostAsync("http://192.168.1.15:8282/api/Customers",new StringContent("=Mystring", Encoding.UTF8, "application/x-www-form-urlencoded"));

    if (response.IsSuccessStatusCode)
    {
        string content = await response.Content.ReadAsStringAsync();
    }
}

Upvotes: 1

Related Questions