通过POST发送字符串 - 不支持的媒体类型或空参数

时间:2017-09-27 14:28:19

标签: c# asp.net-mvc asp.net-web-api dotnet-httpclient

我的控制器无法通过POST方法接受字符串。可能有什么不对?当我创建HttpClient并发送如下内容时:

var content = new FormUrlEncodedContent(new []
{
     new KeyValuePair<string, string>("signature", "someexamplecontent"), 
});

var response = await _client.PostAsync(path, content);

我收到错误:415, Unsupported media type并且它没有进入控制器。相反,当我使用PostAsJsonAsync时 - 踩到参数signature是空的。

var response = await _client.PostAsJsonAsync(path, content);

这是控制器中的方法:

[HttpPost("generatecert")]
public byte[] PostGenerateCertificate([FromBody] string signature)
{      
}

1 个答案:

答案 0 :(得分:3)

端点很可能是针对JSON内容配置的。如果使用PostAsJsonAsync,则只需传递要发布的字符串。

var signature = "someexamplecontent";    
var response = await _client.PostAsJsonAsync(path, signature);

该方法将序列化并为请求设置必要的内容类型标题。

如果发布更复杂的对象,例如

public class Model {
    public string signature { get; set; }
    public int id { get; set; }
}

同样适用,但需要更新操作以期望复杂对象

[HttpPost("generatecert")]
public byte[] PostGenerateCertificate([FromBody] Model signature) {
    //... 
}

并且客户端将发送对象

var model = new Model {
    signature = "someexamplecontent",
    id = 5
};
var response = await _client.PostAsJsonAsync(path, model);

参考Parameter Binding in ASP.NET Web API