.Net 核心全局过滤器
.Net Core Global Filter
这是我第一次使用 Filter
,但无法使用。这是一个非常简单的例子。没有向响应添加任何内容 header,并且在筛选器 class 中未命中断点。我希望这是一个全局过滤器。我错过了什么或做错了什么?
过滤器:
public class TestFilter : IResultFilter
{
public void OnResultExecuted(ResultExecutedContext context)
{
throw new NotImplementedException();
}
public void OnResultExecuting(ResultExecutingContext context)
{
var headerName = "OnResultExecuting";
context.HttpContext.Response.Headers.Add(
headerName, new string[] { "ResultExecutingSuccessfully" });
}
}
STARTUP.CS
public void ConfigureServices(IServiceCollection services)
{
var logger = _loggerFactory.CreateLogger<Startup>();
services.AddCors();
services.AddMvc(options =>
{
options.Filters.Add(new TestFilter());
});
}
控制器方法:
[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Get()
为了让 javascript 在发出 cross-origin 请求时读取响应 headers 您需要在 ASP.NET Core
应用程序中构建 CORS
策略 exposes 某些 headers 给客户
services.AddCors(options =>
{
options.AddPolicy("ResultHeader", policy =>
{
policy
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.WithExposedHeaders("OnResultExecuting"); //headers to be exposed
});
});
并且您在全球范围内使用它
app.UseCors("Default");
或仅针对特定 action/controller
[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
[EnableCors("ResultHeader")] //enabling cors requests
public async Task<IActionResult> Get()
这是我第一次使用 Filter
,但无法使用。这是一个非常简单的例子。没有向响应添加任何内容 header,并且在筛选器 class 中未命中断点。我希望这是一个全局过滤器。我错过了什么或做错了什么?
过滤器:
public class TestFilter : IResultFilter
{
public void OnResultExecuted(ResultExecutedContext context)
{
throw new NotImplementedException();
}
public void OnResultExecuting(ResultExecutingContext context)
{
var headerName = "OnResultExecuting";
context.HttpContext.Response.Headers.Add(
headerName, new string[] { "ResultExecutingSuccessfully" });
}
}
STARTUP.CS
public void ConfigureServices(IServiceCollection services)
{
var logger = _loggerFactory.CreateLogger<Startup>();
services.AddCors();
services.AddMvc(options =>
{
options.Filters.Add(new TestFilter());
});
}
控制器方法:
[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Get()
为了让 javascript 在发出 cross-origin 请求时读取响应 headers 您需要在 ASP.NET Core
应用程序中构建 CORS
策略 exposes 某些 headers 给客户
services.AddCors(options =>
{
options.AddPolicy("ResultHeader", policy =>
{
policy
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.WithExposedHeaders("OnResultExecuting"); //headers to be exposed
});
});
并且您在全球范围内使用它
app.UseCors("Default");
或仅针对特定 action/controller
[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
[EnableCors("ResultHeader")] //enabling cors requests
public async Task<IActionResult> Get()