不正确的数据" null"正在传递给Web API?

时间:2014-10-02 05:32:20

标签: c# .net asp.net-web-api asp.net-web-api2

我正在调用WebApi方法并将数据传递给它。在调试时我可以看到我的控件转到WebAPI方法,但它没有收到我传递给它的正确参数数据。在调试时,我可以看到数据(字符串)正在传递给WebApi,但是在下一步中,WebApi会收到null。接收参数需要一些配置吗?请帮我下面是我的代码:

 public static string PostData(Uri url,string obj)
       {
          string data = null;

           try
           {                          

               using (WebClient proxy = new WebClient())
               {                   
                   proxy.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                   data = proxy.UploadString(url,"Post",obj);
               }
           }
           catch (Exception ex)
           {               
               throw ex;
           }
           return data;
       }

的WebAPI

 [HttpPost]
        public void Post([FromBody]string data)
        {
            leadOptService.AddListOptions(data);            
        }

WebApi Conifg:

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

            // Web API routes
            config.MapHttpAttributeRoutes();

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

2 个答案:

答案 0 :(得分:1)

您尚未将POST映射到任何路线。因此,使用默认路由时,它会尝试将其与id参数进行匹配。您可以为此定义API的新路线:

[RoutePrefix("myController")]
public class MyController : ApiController
{
    [Route("")]
    public void Post([FromBody]string data)
    {
        leadOptService.AddListOptions(data);            
    }
}

假设您的控制器被调用MyController,您可以通过POST api/mycontroller调用它。

答案 1 :(得分:1)

在我看来,这里的问题是不同的,为了澄清这个问题,你通过http体将Json数据传递给WebAPI帖子方法,虽然你能看到web api中的调用中断,但没有数据被填充,输入数据保持为空

原因是传递的数据模式与接收数据的模式不匹配,您使用Json在以下参数中传递字符串:

[FromBody]string data

Json始终是键值对,因此您的http主体应采用以下格式:

{
"data":"Message"
}

这将确保“Message”在输入参数

中被填满