'Post data through Url to webapi

Hej,

I am unable to post data to the action method through querystring to the action method which is located in the controller class below is my code.

I type a url "http://localhost:53459/api/esb/post/test" to post value and nothing happens

Any help would be appreciated.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{value}",
            defaults: new { value = RouteParameter.Optional }
        );
    }
}



[RoutePrefix("api/esb")]
public class EsbController : ApiController
{
    [Route("get")]
    [HttpGet]
    public string Get()
    {
        return "Hello there!";
    }

    [Route("post")]
    [HttpPost]
    [AcceptVerbs("POST")]
    public string Post([FromUri]string value)
    {
        return string.Format("{0} is posted successfully ", value);
    }

    [Route("put")]
    [HttpPut]
    public string Put([FromUri] string value)
    {
        return string.Format("{0} is updated successfully ", value);
    }

    [Route("delete")]
    [HttpDelete]
    public string Delete(string value)
    {
        return string.Format("{0} is deleted successfully ", value);
    }
}


Solution 1:[1]

If you are typing the url into a browser you are constructing a GET request so it will never reach your Post action. You can confirm this by adding "GET" to the allowed verbs on the action (note: remove the [HttpPost] attribute).

[Route("post")]
[AcceptVerbs("POST", "GET")]
public string Post([FromUri]string value)
{
  return string.Format("{0} is posted successfully ", value);
}

Solution 2:[2]

remove parameter binding [FromUri] and update the Route like

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{value}",
            defaults: new { value = RouteParameter.Optional }
        );
    }
}

Controller

[RoutePrefix("api/esb")]
public class EsbController : ApiController
{
    [Route("get")]
    [HttpGet]
    public string Get()
    {
        return "Hello there!";
    }

    [Route("post/{value}")]
    [HttpPost]
    [AcceptVerbs("POST")]
    public string Post(string value)
    {
        return string.Format("{0} is posted successfully ", value);
    }

}

This is working for me, try to use Postman in chrome or fiddler.

POST http://localhost:XXXXX/api/esb/post/test HTTP/1.1

Solution 3:[3]

For dot.Net Core (I'm using v2.0), use FromRoute

[AllowAnonymous]
[HttpPost]
[Route("validateEmail/{validationCode}")]
public async Task<IActionResult> ValidateEmail(
 [FromRoute] Guid validationCode)
    {
        await authService.ValidateEmailAsync(validationCode);

        return Ok();
    }

Then post like this:

enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jon Susiak
Solution 2
Solution 3 Assaf S.