gpt4 book ai didi

c# - 如何从 Web API post 返回一个新类型?

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:55 25 4
gpt4 key购买 nike

我正在尝试想出一种方法来使用一个对象发布到 Web API Controller ,但返回一个不同的、已处理的对象。我找到的所有方法都没有解决问题。

这是我的 MVC 项目中发布到我的 Web API 项目的方法

public dynamic PostStuff<X>(string action, X request)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var task = client.PostAsJsonAsync(new Uri("host/api/somecontroller/post, request);
task.Wait();
var response = task.Result;

return response;

}

}

这是我的 Web API Controller 代码

 public HttpResponseMessage Post([FromBody] FooObject foo)
{
var res = Request.CreateResponse(HttpStatusCode.OK,
new ValidationResponse<FooObject>
{
ID = new Random().Next(1000, 1000000),
Content =
new List<IContent>()
{
{
new Content()
{
Name = "TheContent",
Type = "SomeType",
Value = "This is some content for the page : " + foo.Bar
}
}
},
Product = new ProductFoo(),
Validated = true
});
return res;
}
}

当我在我的 WebAPI Controller 代码中放置一个中断时,res 变量被正确创建。一旦处理返回到 PostStuff 方法,我得到的只是一个 StreamResponse,没有在 Web API Controller 中创建的 ValidationResponse 对象的踪迹。没有错误,但除了帖子成功之外,我不能在响应中使用任何内容。如何从我的发布方法中提取 ValidationResponse?

最佳答案

我自己构建了这个通用函数作为 POST 到 Web API

的助手

用法

var result = PostAsync<MyDataType, MyResultType>("http://...", MyData)

函数

public async Task<U> PostAsync<T, U>(string url, T model)
{
using (HttpClient httpClient = new HttpClient(httpHandler))
{
var result = await httpClient.PostAsJsonAsync<T>(url, model);

if (result.IsSuccessStatusCode == false)
{
string message = await result.Content.ReadAsStringAsync();
throw new Exception(message);
}
else
{
return await result.Content.ReadAsAsync<U>();
}
}
}

HttpClientHandler 为 Windows Auth 配置

protected HttpClientHandler httpHandler = new HttpClientHandler() { PreAuthenticate = true, UseDefaultCredentials = true };

关于c# - 如何从 Web API post 返回一个新类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303970/

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