作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Web API Controller 中有一个异步读取字节的操作:
public HttpResponseMessage Post() {
var response = Request.CreateResponse(HttpStatusCode.Created);
var task = Request.Content.ReadAsByteArrayAsync().ContinueWith(t => {
DoSomething(t.Result);
});
task.Wait();
return response;
}
在我的 DoSomething 方法中,我需要访问 HttpContext,例如,使用 NHibernate 的 WebSessionContext。不幸的是,HttpContext.Current 为空。
I've learned 我可以使用闭包来解决我的问题:
var state = HttpContext.Current;
var task = Request.Content.ReadAsByteArrayAsync().ContinueWith(t => {
HttpContext.Current = state;
DoSomething(t.Result);
});
我想知道是否有更好的方法...Web API 不应该对此有一些扩展吗?
最佳答案
尝试让你的 Action 异步:
public async Task<HttpResponseMessage> Post()
{
byte[] t = await Request.Content.ReadAsByteArrayAsync();
DoSomething(t);
// You could safely use HttpContext.Current here
// even if this is a terribly bad practice to do.
// In a properly designed application you never need to access
// HttpContext.Current directly but rather work with the abstractions
// that the underlying framework is offering to you to access whatever
// information you are trying to access.
// Bear in mind that from reusability and unit restability point of view,
// code that relies on HttpContext.Current directly is garbage.
return Request.CreateResponse(HttpStatusCode.Created);
}
关于nhibernate - 如何在 Web API 异步任务中保留 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368209/
我是一名优秀的程序员,十分优秀!