我正在尝试开发一个web api,当我测试post方法时,body总是为null。我在发送请求时尝试了所有内容:
export NPM_USERNAME=mUs34
export NPM_PASSWORD=mypassW0rD
export NPM_EMAIL=user@domain.com
npm adduser<<!
$NPM_USERNAME
$NPM_PASSWORD
$NPM_EMAIL
!
我使用断点,并且正确调用API,但是body成员始终为null:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:1748/api/SomeAPI");
req.Method = "post";;
var aaa = Encoding.Default.GetBytes("Test");
req.ContentType = "application/xml";
req.ContentLength = aaa.Length;
req.GetRequestStream().Write(aaa, 0, aaa.Length);
HttpWebResponse res =(HttpWebResponse) req.GetResponse();
using (System.IO.StreamReader sr = new System.IO.StreamReader(res.GetResponseStream())) {
Console.WriteLine(sr.ReadToEnd());
}
答案 0 :(得分:0)
您的内容类型设置为XML,因此您必须将数据作为XML传递。这意味着将您的数据包装在<string>
元素中。
我建议使用RestSharp(http://restsharp.org/)从.Net进行WebAPI调用。
var client = new RestClient("http://localhost:1748/");
var request = new RestRequest("api/SomeAPI", Method.POST);
request.AddBody("Test");
var response = client.Execute(request);
<强>更新强>
我创建了一个示例项目,它的工作非常好:
服务器端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
namespace WebApplication1.Controllers
{
public class HomeController : ApiController
{
[Route("api/TestAPI")]
[HttpPost]
public IHttpActionResult Post([FromBody]String test)
{
return Ok(string.Format("You passed {0}.", test));
}
}
}
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:1748/api/TestAPI");
req.Method = "post"; ;
var aaa = Encoding.Default.GetBytes("\"Test\"");
req.ContentType = "application/json";
req.ContentLength = aaa.Length;
req.GetRequestStream().Write(aaa, 0, aaa.Length);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
using (System.IO.StreamReader sr = new System.IO.StreamReader(res.GetResponseStream()))
{
Console.WriteLine(sr.ReadToEnd());
}
}
}
}
在IIS中安装WEB API服务并运行控制台应用程序后,它会打印:
"You passed Test."
请注意响应周围的引号。 如果要使用XML,则需要修改要发送的内容类型和数据:
var aaa = Encoding.Default.GetBytes("<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">Test</string>");
您将获得的回复是
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">You passed Test.</string>
调试器中的两个样本都将在测试参数中传递正确的值。
答案 1 :(得分:0)
试
[HttpPost]
public void SomeApi()
{
var test = HttpContext.Current.Request.Form["Test"];
}
如果你正确发送了这个值,这将100%
答案 2 :(得分:-1)
要尝试两件事,第一,使用像Postman这样久经考验的工具尝试您的请求。这将消除您的请求以任何方式发生错误的任何可能性。 2,尝试将ContentType更改为text / plain。请求管道可能会看到application / xml,但是你的请求体是无效的xml,它确实应该是一个错误的请求,但只是被序列化为null。