我试图在我的webApi端点上接受application/x-www-form-urlencoded
数据。当我向PostMan发送一个明确设置了此Content-Type标头的请求时,出现错误:
请求包含实体主体但没有Content-Type标头
我的控制器:
[HttpPost]
[Route("api/sms")]
[AllowAnonymous]
public HttpResponseMessage Subscribe([FromBody]string Body) { // ideally would have access to both properties, but starting with one for now
try {
var messages = _messageService.SendMessage("flatout2050@gmail.com", Body);
return Request.CreateResponse(HttpStatusCode.OK, messages);
} catch (Exception e) {
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
}
POSTMAN上限:
我做错了什么?
答案 0 :(得分:10)
如果查看请求消息,您可以看到Content-Type
标头正在发送。
Content-Type: application/x-www-form-urlencoded, application/x-www-form-urlencoded
因此,您手动添加Content-Type
标题,并且POSTMAN也添加了该标题,因为您已选择了x-www-form-urlencoded标签。
如果删除已添加的标题,则应该可以使用。我的意思是你不会得到错误,但由于简单的类型参数[FromBody]string Body
,绑定将不起作用。你需要有这样的动作方法。
public HttpResponseMessage Subscribe(MyClass param) { // Access param.Body here }
public class MyClass
{
public string Body { get; set; }
}
相反,如果您坚持绑定到string Body
,请不要选择x-www-form-urlencoded标签。而是选择原始选项卡并发送=Test
的正文。当然,在这种情况下,您必须手动添加`Content-Type:application / x-www-form-urlencoded'标头。然后,正文中的值(Test)将正确绑定到参数。