2014-10-02 63 views
0

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

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

回答

1

您尚未将您的文章给任何路由。所以使用默认路由时,它试图将其与id参数相匹配。您可以为您的API一个新的路线是这样的:

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

假设你的控制器被称为MyController,你会通过POST api/mycontroller调用它。

+0

感谢答复填满,我没有,但有错误“的远程服务器返回错误:(405)不允许的方法” 在调试控制中不会去WebApi。请帮助 – user576510 2014-10-02 05:56:16

+0

我尝试过在Fidler中调用并接收这个messae“{”Message“:”请求的资源不支持http方法'POST'。“}” 在我的调用方法中,我也有“Post”。请指导。 – user576510 2014-10-02 06:03:27

+0

在我看来,这个问题与路由无关,因为调用得到正确路由,它更多的是传递json数据和输入参数之间的模式不匹配 – 2014-10-02 06:18:09

1

在我看来这里的问题是不同的,为了澄清问题,您通过http body将Json数据传递给WebAPI post方法,尽管您可以看到web api中的调用中断但没有数据获取填充,输入数据保持为空

原因是传递数据的架构和参数之间的不匹配接收它,你是使用JSON通过下面的参数字符串:

[FromBody]string data 

的Json总是一个关键值对,所以你的http身体应该是这样的格式:

{ 
"data":"Message" 
} 

这将确保“信息”获取输入参数

+0

谢谢,我试过传递我的名字,但它仍然是空的。 – user576510 2014-10-02 06:33:20

+0

为了澄清从我的MVC控制器我可以传递一个字符串(只是我的名字或一个对象序列化),以帮助有问题的方法。但从帮助方法到WebApi方法接收参数为null。 – user576510 2014-10-02 06:34:57

+0

最后的Json不正确,请看编辑后的版本,关键还需要在引号中。刚刚在Json Lint验证器上试过 – 2014-10-02 06:37:31

相关问题