use*_*798 4 asp.net-core asp.net-core-middleware
我有一个User静态属性的静态类Username.我在每个url请求的中间件中设置此属性.然后我Username在网站标题中显示给用户.
在每个请求中,都会设置此静态属性,然后在视图中显示.我假设每个请求在属性中都有自己的(正确的)值,并且不会在不同的请求之间共享值?
那么,如果请求一个有价值adam而请求2有价值john,亚当会看到亚当和约翰会在标题中看到约翰?这在我的应用程序中工作正常,但只是想确保概念上它是正确的?
这已经被告知这是一个很好的候选人,HttpContext.Items可以使用唯一的对象键来避免关键冲突.由于每个上下文对于每个请求都是唯一的,因此它们将允许不在不同请求之间共享值.您没有将值设置为中间件上的静态值,而是设置在当前请求上下文中.
public class SampleMiddleware {
public static readonly object SampleKey = new Object();
public async Task Invoke(HttpContext httpContext) {
httpContext.Items[SampleKey] = "some value";
// additional code omitted
}
}
Run Code Online (Sandbox Code Playgroud)
其他代码可以
HttpContext.Items使用中间件类公开的密钥访问存储的值:
public class HomeController : Controller {
public IActionResult Index() {
string value = HttpContext.Items[SampleMiddleware.SampleKey];
}
}
Run Code Online (Sandbox Code Playgroud)
因此,只有密钥是静态的,但项目中设置的值对于每个请求都是唯一的.这意味着在您的情况下,如果请求一个具有值adam并且请求2具有值john,则adam将看到adam并且john将john在标题中看到
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |