c# - HttpClient 通过 BSON 到 RESTful API
问题描述
我已经尝试将对象从窗口客户端发布到控制器。
它可以是接收测试对象但id
和id2
是0
和null
值。
我错过了一些配置吗?
public class Test
{
public int id { get; set; }
public string id2 { get; set; }
}
//webapiconfig
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Formatters.Add(new BsonMediaTypeFormatter());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
窗口客户端
private async void Form1_LoadAsync(object sender, EventArgs e)
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:58716/");
// Set the Accept header for BSON.
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));
var aa = new Test()
{
id = 2,
id2="3333"
};
// POST using the BSON formatter.
MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
var result = await client.PostAsync("Report/Test", aa, bsonFormatter);
result.EnsureSuccessStatusCode();
}
}
网络服务器
public class ReportController : Controller
{
public void Test(Test aa)
{
}
}
解决方案
Register
正在配置一段ApiController
时间,显示ReportController
的是 MVCController
更新目标控制器以从正确的类型派生并具有必要的属性。
[RoutePrefix("api/Report")]
public class ReportController : ApiController {
//POST api/Report/Test
[HttpPost]
[Route("Test")]
public IHttpActionResult Test([FromBody]Test model) {
if(ModelState.IsValid) {
//...
return Ok();
}
return BasRequest(ModelState);
}
}
并更新客户端以发送到正确的 URL
//...
// POST using the BSON formatter.
MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
var result = await client.PostAsync("api/Report/Test", aa, bsonFormatter);
result.EnsureSuccessStatusCode();
推荐阅读
- php - 无法声明类,因为该名称已在(同一文件)中使用
- json - 与ajv一起使用的json-schema的正确用法是什么?
- c - 在 C 编程中检查用户的验证
- python-3.x - 使用 android 的 qpython3 唤醒局域网
- android - 如何正确设置 ZXingScannerView 的选项?
- r - 尝试在 R 中为 abline 设置范围
- python - 我为我的程序制作了一个注册编码,我将注册的学生数据存储在一个 text.file 中
- c# - C# 将 XML 节点字符串转换为 Int32
- python - 是否可以从 Scrapy 的管道中生成项目?
- c - ptrdiff_t 的动机是什么?