我正在开发一个通过第三方提交请求的MVC项目。
在我的控制器中,我有一个SubmitClaims()动作,它接收ajax请求,然后调用RunAsync()。 RunAsync使用HttpClient提交请求。 我不确定我是否在这里做了正确的事。
此外,我有两个版本的SubmitClaims(),两者都有效。但我不知道哪个版本更好。
版本1
[HttpPost]
public async Task<string> SubmitClaims()
{
string result = "";
result = await RunAsync();
return result;
}
版本2向Cannot implicitly convert type 'string' to 'System.Threading.Tasks.Task<string>'
学习 [HttpPost]
public async Task<string> SubmitClaims()
{
return await Task.Run(() =>
{
return RunAsync();
});
}
static async Task<string> RunAsync()
{
string result = "Failed.";
using (var client = new HttpClient())
{
try
{
client.BaseAddress = new Uri("http://peter:8001/internal/uickpost");
client.DefaultRequestHeaders.Add("contenttype", "application/xml");
client.DefaultRequestHeaders.Add("hiconline.protocol.content.role", "REQUEST");
client.DefaultRequestHeaders.Add("hiconline.protocol.content.transactionid", "asdfsdf");
client.DefaultRequestHeaders.Add("hiconline.protocol.remote.contenttype", "TestDataType");
client.DefaultRequestHeaders.Add("hiconline.protocol.remote.mode", "P");
client.DefaultRequestHeaders.Host = "peter:8001";
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
string opv = "Test Data";
HttpContent _content = new StringContent(opv);
_content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
_content.Headers.Add("contenttype", "TestDataType");
HttpResponseMessage response1 = await client.PostAsync(client.BaseAddress, _content);
if (response1.IsSuccessStatusCode)
{
Uri gizmoUrl = response1.Headers.Location;
result = response1.Content.ReadAsStringAsync().Result;
}
}
catch (Exception ex)
{
result = ex.Message;
}
return result;
}
}
答案 0 :(得分:4)
选项1更好。 RunAsync()
已经返回任务,为什么要创建另一个任务呢?
更好的是return await RunAsync();
。更好的是直接调用RunAsync
,因为包装器不会添加任何内容。