通过Url将数据发布到webapi

时间:2017-01-23 12:18:37

标签: asp.net-web-api

HeJ小鼠,

我无法通过查询字符串将数据发布到action方法,该方法位于下面的控制器类中,是我的代码。

我输入了一个网址" http://localhost:53459/api/esb/post/test"发布价值而没有任何反应

任何帮助都将不胜感激。

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);
    }
}

3 个答案:

答案 0 :(得分:0)

如果您在浏览器中输入网址,则表示您正在构建GET请求,因此它永远不会到达您的Post操作。您可以通过在操作上允许的动词中添加“GET”来确认这一点(注意:删除[HttpPost]属性)。

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

答案 1 :(得分:0)

删除参数绑定[FromUri]并更新Route

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/{value}")]
    [HttpPost]
    [AcceptVerbs("POST")]
    public string Post(string value)
    {
        return string.Format("{0} is posted successfully ", value);
    }

}

这对我有用,尝试在chrome或fiddler中使用Postman。

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

答案 2 :(得分:0)

对于dot.Net Core(我使用的是v2.0),请使用 FromRoute

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

        return Ok();
    }

然后这样发帖:

enter image description here