gpt4 book ai didi

c# - 如何通过带有 header 的 HttpClient 将复杂对象发布到 Controller 的 Post 方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:35 27 4
gpt4 key购买 nike

问题的重点是为请求提供 header ,因此我假设只考虑 HttpClient.SendAsync() 方法。不是 PostAsync 或 PostAsJsonAsycn()

这是我用来发送 POST 请求的代码:

var request = new HttpRequestMessage()
{
RequestUri = new Uri(@"http://test/" + controllerUri),
Method = HttpMethod.Post,
};

request.Headers.Add(_authHeader, c_authToken);
request.Content = new ObjectContent<RequestType>(content, new JsonMediaTypeFormatter());

var result = _client.SendAsync(request).Result;

我不断收到 500 错误,指出序列化对象的 Duration 属性无效,尽管实际上它是在对象中设置的。

我尝试将媒体类型设置为“application/json”的 StringContent,但我遇到了同样的错误。

Controller 的 post 方法具有以下签名:

公共(public) HttpResponseMessage 发布(MyContentObject 内容){...

进入方法前抛出异常

有趣的是,当我从 MyContentObject 中注释掉 [Required] 属性时:

public class MyContentObject
{
[Required]
public int Duration { get; set; }

public decimal SomePropA { get; set; }
public bool SomePropB { get; set; }
}

它有效并且 Duration 属性按预期正确设置。

所以问题可能是为什么在这种情况下添加 [Required] 属性会造成这么多问题?您可能会问为什么要向 int 属性添加 [Required] 属性。我的回答是我不知道是谁添加的,对我来说这没有意义,但如果有,请告诉我。

谢谢

最佳答案

我对此做了更多研究。所以我会从头开始。此线程中涵盖了 [Required] 注释问题:http://aspnetwebstack.codeplex.com/workitem/270

基本上内置的 InvalidModelValidatorProvider 检查模型验证是否有像上面这样的无意义的注释(值类型属性总是有一个值)并抛出异常。上面的文章还提到了一种解决方法,可以在不更改现有注释的情况下避免抛出异常。

以下代码使您能够发布序列化为 JSON 的对象并附加 header :

// var RequestType content <- this is an input parameter. 

var request = new HttpRequestMessage()
{
RequestUri = new Uri(@"http://test/" + yourControllerUri),
Method = HttpMethod.Post,
};

request.Headers.Add("YourHeaderName", "YourHeaderValue");
request.Content = new ObjectContent<RequestType>(content, new JsonMediaTypeFormatter());

var result = _client.SendAsync(request).Result;

我希望有人会觉得它有用。

关于c# - 如何通过带有 header 的 HttpClient 将复杂对象发布到 Controller 的 Post 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com