通过FromUri或FromBody

时间:2019-01-15 04:30:14

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

我正在尝试使用网络api创建一个示例。我想要使​​用fromurifrombody的JSON中接收的参数。创建客户端时,我想发送包含信息的对象或JSON。

在我的Web API中,我有这个

[HttpPost]
public IHttpActionResult Post([FromUri]Peticion peticion)
{
     return Ok(peticion);
}

和我的客户

Peticion obj = new Peticion();
obj.cliente = 2;
obj.factura = 22;
string DATA = Newtonsoft.Json.JsonConvert.SerializeObject(obj);

var client = new HttpClient();
HttpContent content = new StringContent(DATA, UTF8Encoding.UTF8, "application/json");

HttpResponseMessage message = 
client.PostAsync("http://localhost:57418//api/Deudor/",content).Result;

if (message.IsSuccessStatusCode)
{
   string result = message.Content.ReadAsStringAsync().Result;
}

但是我需要在我的客户端中收到JSON。在Web API中,我需要接收两个参数(cliente,factura),在我的客户端中,我需要以JSON接收该客户端的信息(名称,发票等)。

我使用邮递员,并收到了包含信息的JSON。但是在我的客户C#中,我做不到。

2 个答案:

答案 0 :(得分:0)

无论使用.net内核还是框架,都可以使用HttpClient将Get和Post请求发送到您的API。

POST请求:

HttpClient client = new HttpClient();
var content = new StringContent(JsonConvert.SerializeObject(YourObject), Encoding.UTF8, "application/json");
client.PostAsync("your url", content);

然后您可以获取内容[FromBody] 您可以使用Post请求并从url获取参数,但在这种情况下最好使用get。

获取请求:

HttpClient client = new HttpClient();
client.GetAsync("your url/api/controller/id/{id}");

在两种情况下,都需要使用请求类型(GET,POST)为方法设置路由。 例如:在上面的get示例中:

[Route("api/[controller]")
public class SomeController
{
  [HttpGet]
  [Route("id/{id}")]
  public someGetMethod(int id){
    //do something with id here...
  }
}

答案 1 :(得分:0)

在Web API中,如果控制器方法的参数不是“简单”类型,则它将尝试从主体获取值。因此,我认为您想删除[FromUri]参数中的Post(),因为您实际上是在请求正文中发送该信息。

来源:https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api