.Net Core Глобальный фильтр - PullRequest
1 голос
/ 02 апреля 2019

Я впервые использую 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()

1 Ответ

2 голосов
/ 02 апреля 2019

Для того, чтобы javascript мог читать заголовки ответа при выполнении запроса с несколькими источниками, вам нужно создать CORS политику в ASP.NET Core приложении, которое выставляет определенные заголовки клиенту

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...