Я получил 404 на двойной косой после обновления до inProcess - PullRequest
0 голосов
/ 03 октября 2019

У меня есть .net core 2.2 web api, я обновил его до «inProcess», клиенты, которые вызывают эту услугу с двойной переадресацией, получили 404, при настройке на «OutOfProcess» все работает нормально. пример проблемного вызова:

https://mMYApiAddress.co/api/GetSomeData//3

при настройке его на «OutOfProcess» все работает просто отлично.

я хочу, чтобы мой веб-API работал с настройкой «inProcess»и сможет получать звонки с двойной косой чертой, как и раньше.

1 Ответ

0 голосов
/ 04 октября 2019

При настройке «OutOfProcess» веб-сервер Kestrel используется для обработки ваших запросов. В веб-сервере Kestrel пробелы или дополнительные строки в пути запроса автоматически распознаются, а путь изменяется в правильном формате.

При настройке «InProcess» вместо сервера Kestrel используется HTTP-сервер IIS (IISHttpServer)Запросы обрабатываются непосредственно приложением. Итак, вы получили ответ 404.

Вы можете настроить промежуточное ПО для перезаписи URL, как показано ниже:

public class RewriteRouteRule
{

    public static void ReWriteRequests(RewriteContext context)
    {
        var request = context.HttpContext.Request;
        if (request.Path.Value.Contains("values"))
        {
            string[] splitlist = request.Path.Value.Split("/");
            var newarray = splitlist.Where(s => !string.IsNullOrEmpty(s)).ToArray();
            var newpath = "";

            foreach (var item in newarray)
            {
                newpath += "/" + item;
            }
            request.Path = newpath;
        }
    }
}

Использовать промежуточное ПО в методе Configure Startup.cs

app.UseRewriter(new RewriteOptions()
                      .Add(RewriteRouteRule.ReWriteRequests)
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...