2015-05-27 35 views
1

我想发送两个参数get和post到服务上的方法没有模型,但它总是空的。我怎么解决这个问题?此外,这个问题的逻辑原因是什么?代码如下,我遇到问题;WebApi GET和多个POST参数无模型总是空

[HttpGet] 
public Result GetUser(string userId) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     return dc.GetUser(userId); 
    } 
} 

[HttpPost] 
public Result CreateUser([FromBody]string firstname, [FromBody]string lastname) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     return dc.CreateUser(firstname, lastname); 
    } 
} 
+0

你是什么意思,你试图没有模型做到这一点? – Luke

+0

你也可以发布你的ajax请求调用,没有它你的问题是不完整的。 – Yasser

回答

1

您在POST请求中要做的事情根据HTTP协议无效。每个Web请求只能有一个主体,虽然可以通过一个非结构化形式的单个参数,但两个(源Asp.net网站here)是不可能的。因此你有2个选择:

1)。将2个参数添加到url - 将[FromBody]更改为[FromUri]

2)。将这两个参数封装到一个类/模型中,并接受它作为你post方法的输入(从body或URL/URi都可以)。数据的发送者就可以指定他们希望如何使用asp.net网站的API发送此,通过XML或JSON,默认情况下

+0

感谢您的推荐。我刚刚检查了你在上面指出的文件。 –

0

样品Ajax调用的消耗你的网页API

$.ajax({ 
     url: "http://localhost:49493/api/Values", 
     type: "Get", 
     data: {'userId' : 1} 
     success: function (data) { 
      /// process data 
     }, 
     error: function (msg) { alert(msg); } 
    }); 
1

的'FromBody'属性只能用于方法中的单个参数,因此使用'FromBody'将它们标记为不起作用。 您可以创建一个包含'firstname'和'lastname'作为属性的简单模型,并为post方法提供该类型的参数。

另一个解决方案是使用从解析Json中获得的动态对象来获取属性。

dynamic foo = JObject.Parse(jsonText);

string firstname = foo.firstname;

string lastname = foo.lastname;

+0

谢谢你的推荐。 –