我对HttpResponseMessage
和Task<HttpResponseMessage>
感到困惑。
如果我使用HttpClient
方法PostAsync()
发布数据,我需要将Task<HttpResponseMessage>
而不是HttpResponseMessage
作为返回值给予Web服务方法我明白了。
如果我使用Request.CreateResponse(HttpStatusCode.Forbidden, myError.ToString());
然后我只获取了响应消息对象,但没有获得Task
对象。
所以我的问题是如何为web api方法的异步调用创建Fitting返回?
(因此我的理解是正确的,如果是这样,如何最好地将消息对象转换为Task<HttpResponseMessage>
对象)
原始代码:
public HttpResponseMessage DeviceLogin(MyDevice device)
{
EnummyError myError = EnummyError.None;
// Authenticate Device.
myError = this.Authenticate(device);
if (myError != EnummyError.None)
{
return Request.CreateResponse(HttpStatusCode.Forbidden, myError.ToString());
}
}
更新的方法标题:
public Task<HttpResponseMessage> DeviceLogin(MyDevice device)
答案 0 :(得分:3)
Web Api 2具有这些抽象类,现在建议使用它们。您仍然可以使用HttpResponseMessage
(在我看来,初学者更容易理解),但Web Api 2建议使用IHttpActionResult
。
至于返回类型,只是做了你以前做过的事情。 Task<T>
以这种方式自动。
您还可以查看this.Authenticate()
是否有async
变体。
public async Task<IHttpActionResult> DeviceLogin(MyDevice device)
{
EnummyError myError = EnummyError.None;
// Authenticate Device.
myError = this.Authenticate(device);
// Perhaps Authenticate has an async method like this.
// myError = await this.AuthenticateAsync(device);
if (myError != EnummyError.None)
{
return ResponseMessage(Request.CreateResponse(Request.CreateResponse(HttpStatusCode.Forbidden, myError.ToString()));
}
}
ResponseMessage()
方法在水下创建ResponseMessageResult
。此类派生自IHttpActionResult
,并在构造函数中接受HttpResponseMessage
作为参数(由Request.CreateResponse()
生成)。