【发布时间】:2019-08-05 11:42:51
【问题描述】:
我是 ASP.NET Core MVC 的新手,只是一个关于全局过滤器生命周期的问题。 我创建了一个全局过滤器(结果过滤器)为:
public class MessageAttribute : ResultFilterAttribute
{
private int GetNum { get; set; } = 0;
...
public override void OnResultExecuting(ResultExecutingContext context)
{
GetNum += 1;
WriteMessage(context, $"<div>The Num is:{GetNum }</div>");
}
...
private void WriteMessage(FilterContext context, string msg)
{
byte[] bytes = Encoding.ASCII.GetBytes($"<div>{msg}</div>");
context.HttpContext.Response.Body.Write(bytes, 0, bytes.Length);
}
}
然后我运行了应用程序,每次我从 1、2、3....等刷新页面时,Num 输出都会增加
然后我在startup.cs 中注册了MessageAttribute 为:
services.AddTransient<MessageAttribute>();
services.AddMvc().AddMvcOptions(options =>{
options.Filters.Add(new MessageAttribute());
});
所以无论我刷新页面多少次,我都希望 Num 输出始终为“1”,因为 MessageAttribute 已注册为“瞬态”,这意味着创建了一个新的 MessageAttribute 实例每次对于每个新请求,但是当我运行应用程序时,Num 输出仍然从 1 增加到 2、3 ...每次我刷新页面时,并不意味着全局过滤器只能注册为:
services.AddSingleton<MessageAttribute>();
不知何故,asp.net core MVC 只是用上面的语句覆盖了我的注册,我的理解是否正确?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc