繁体   English   中英

.Net核心全局筛选器

[英].Net Core Global Filter

这是我第一次使用Filter ,但无法正常工作。 这是一个非常简单的例子。 什么都没有添加到响应头,并且在过滤器类中没有命中断点。 我希望这是一个全局过滤器。 我想念什么或做错什么?

筛选器

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在发出跨域请求时读取响应标头,您需要在ASP.NET Core应用程序中构建CORS策略,该策略某些标头公开给客户端

services.AddCors(options =>
{
    options.AddPolicy("ResultHeader", policy =>
    {
        policy
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .WithExposedHeaders("OnResultExecuting"); //headers to be exposed
    });
});

您在全球范围内使用

app.UseCors("Default");

或仅用于特定动作/控制器

[HttpGet("", Name = "search")]
[ProducesResponseType(typeof(PagedResult<SearchViewModel>), (int)HttpStatusCode.OK)]
[EnableCors("ResultHeader")] //enabling cors requests
public async Task<IActionResult> Get()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM