gpt4 book ai didi

c# - 如何使用 System.Net.Http.HttpClient 在 POST 后使用 AllowAutoRedirect = true 进行 GET

转载 作者:行者123 更新时间:2023-11-30 17:03:23 25 4
gpt4 key购买 nike

这是创建客户端和 POST 对象的代码。据我了解,设置 AllowAutoRedirect = true 将使客户端能够遵循重定向然后执行 GET,我将能够反序列化所述对象。到目前为止,我的测试被证明是不成功的。有什么我可能忽略的吗?

网络 API 端点:

public HttpResponseMessage Post([FromBody] Contact contact) {

try {
// Add user

...

var msg = Request.CreateResponse(HttpStatusCode.Created);
msg.Headers.Location = new Uri(Request.RequestUri + "/" + customer.Person.PersonID);
return msg;
} catch (ValidationException tve) {
var apiError = new ApiResponseMessage { Message = "Invalid contact" };
foreach (var message in FilterErrors(tve.Messages)) {
if (message.Contains("required", StringComparison.OrdinalIgnoreCase)) {
apiError.Errors.Add(new ApiErrorMessage {
Code = ErrorCode.RequiredPropertyNotProvided,
Message = message
});
} else {
apiError.Errors.Add(new ApiErrorMessage {
Code = ErrorCode.PropertyNotValid,
Message = message
});
}
}
return Request.CreateResponse(HttpStatusCode.BadRequest, apiError);
}
}

客户端代码:

public Contact Post(Contact contact)
{
try
{
var handler = new HttpClientHandler { AllowAutoRedirect = true};
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(APIServer);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("X-ApiKey", APIKey.ToString());

var response = client.PostAsJsonAsync("v1/Contacts", contact).Result;
if (response.IsSuccessStatusCode)
{
Log.DebugFormat("Post v1/Contacts => {0} ({1})", response.StatusCode, response.ReasonPhrase);

var result = JsonConvert.DeserializeObject<Contact>(response.Content.ReadAsStringAsync().Result);
// This object is null

}
else
{
Log.ErrorFormat("Post v1/Contacts => {0} ({1})", response.StatusCode, response.ReasonPhrase);
var result = JsonConvert.DeserializeObject<ApiMessageResponse>(
response.Content.ReadAsStringAsync().Result);
}


}

}
catch (Exception exception)
{
Log.Error(exception);
}

return null;
}

Wireshark 日志。

POST/v1/Contacts HTTP/1.1(应用程序/json)HTTP/1.1 201 已创建地址:http://api01.example.com/v1/Contacts/10135052

就是这样,据我所知,没有 GET ( http://api01.example.com/v1/Contacts/10135052)。

最佳答案

从您添加的日志跟踪来看,POST 的响应似乎是 201(已创建);没有重定向。响应确实包含一个 URL(在标题或正文中,很难说)但它不会有任何特殊意义。您的客户端需要自己解析 URL 并明确发出后续的 GET 请求。

关于c# - 如何使用 System.Net.Http.HttpClient 在 POST 后使用 AllowAutoRedirect = true 进行 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622288/

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