【发布时间】:2015-10-01 11:15:41
【问题描述】:
public class MyMiddleware
{
RequestDelegate _next;
public MyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
//await context.Response.WriteAsync("Hello!");
await _next(context);
context.Response.Headers.Add("X-ElapsedTime", new[] { "bla" });
}
}
只要我添加类似标题的内容。我无法再收到来自我的 Web API 控制器的响应。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMyMiddleware();
app.UseMvc();
}
我需要先阅读以下中间件“UseMvc”产生的答案吗?
我只有一个非常简单的Controller方法:
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
//Task t = new Task(() => Thread.Sleep(2000));
//t.Start();
return new string[] { "value1", "value2" };
}
我想我找到了解决方案,但实际上并不是一个完整的答案:
public class MyMiddleware
{
RequestDelegate _next;
HttpContext _context;
public MyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
_context = context;
context.Response.OnStarting(OnStartingCallback, state: this);
await _next(context);
}
public Task OnStartingCallback(object state)
{
_context.Response.Headers.Set("x-bla", "bla");
return Task.FromResult(0);
}
}
我找到了一个参考:https://github.com/aspnet/Session/blob/master/src/Microsoft.AspNet.Session/SessionMiddleware.cs 并尝试根据它构建我的代码。
无论如何,这段代码感觉不是很安全。它真的是线程安全的吗?
【问题讨论】:
标签: asp.net asp.net-web-api asp.net-core