Метод ядра ASP.NET не разрешен 405 - PullRequest
0 голосов
/ 18 декабря 2018

Разработка платформы API, которая должна быть согласованной с помощью самой службы приложений и охватывающей службу управления API Azure, - я обнаружил, что столкнулся с несоответствиями между ними.

Отправка запроса с неправильным глаголом HTTP (например, вместо PUTPOST) к результатам службы управления API с 404 Не найдено ответа ( из-за известной проблемы ).

Отправка того же запроса напрямую в приложение на базе ASP Core 2.2 приведет к ответу 405 Not Allowed.

Есть ли какая-либо возможность в ASP Core (возможно, промежуточное ПО) перехватить результат кода ответа 405 и изменить его на 404?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Это то, что вы можете обрабатывать с помощью промежуточного программного обеспечения StatusCodePages.Вот пример:

app.UseStatusCodePages(ctx =>
{
    if (ctx.HttpContext.Response.StatusCode == 405)
        ctx.HttpContext.Response.StatusCode = 404;

    return Task.CompletedTask;
});

Аргумент, переданный в UseStatusCodePages, является функцией обратного вызова, которая выполняется всякий раз, когда промежуточное ПО обнаруживает ответ с кодом состояния от 400 до 599 (с пустым телом).В приведенном выше примере мы просто проверяем 405 и меняем его на 404.Сам вызов UseStatusCodePages должен быть сделан перед любым промежуточным программным обеспечением для обработки запросов, таким как MVC.

0 голосов
/ 18 декабря 2018

Не уверен, что я просто поклонник слепого преобразования кода статуса.Конечно, до вас, исходя из вашего точного сценария.

Этот бит промежуточного программного обеспечения, внедренный в ваш метод Configure, сработает:

public void Configure(IApplicationBuilder app)
{
    app.Use(next => context =>
    {
        context.Response.OnStarting(() =>
        {
            if (context.Response.StatusCode == 405)
            {
                context.Response.StatusCode = 404;
            }

            return Task.CompletedTask;
        });

        return next(context);
    });
}

ПРИМЕЧАНИЕ. Добавьте этов начале цепочки.

...