На сервере IIS10 после deploy не работают api-контроллеры, при запуске в среде разработке в IISExpress api-контроллеры работают

Проект ASP NET CORE MVC 3. Сервер IIS10.

Представления изначально отображаются с помощью контроллеров mvc, приложение mvc, и везде где задействованы mvc контроллеры - все работает и на IISExpress и на IIS после деплоя. Часть функционала у меня работает через api-контроллеры, функции JS у меня отправляют запрос на api-контроллеры, пример такой JS-функции и такого ip-контроллера ниже, и вот данные контроллеры после публикации не работают.

В проекте в файлах представлениях я прописывал ссылки на файлы с JS функциями следующем образом:

@section Scripts {

    <script type="text/javascript" src="~/js/JS_Create_Edit_Friend.js"></script>
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

В самом файле прописываю:

// Обновление списка улиц после выбора города
$(function () {
    $("#CityId").change(function () {
        var formData = { 'CityId': Number.parseInt($('#CityId').val()), 'Name': $('#CityId>option:selected').text() };
        $.ajax({
           // url: "http://localhost:18246/api/API/searchStreets",
            url: "/api/API/searchStreets",
            headers:
            {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'RequestVerificationToken': $('#RequestVerificationToken').val()
            },
            type: 'POST',
            dataType: "json",
            data: JSON.stringify(formData),
            success: function (data) {
 
                dataFilling(data, 'idStreet', 'name', '#StreetId', '<option/>');
 
                // Генерация события для элемента Select
                let elemSelectHouse = document.querySelector('#StreetId')
                elemSelectHouse.selectedIndex = 0;
                const event = new Event("change");
                elemSelectHouse.dispatchEvent(event);
            },
            error: function (result, status, er) {
                alert("error: " + result + " status: " + status + " er:" + er);
            }
        });
 
    });    
});

На тесте на IISExpress все работает, на после публикации на IIS выдает ошибку, что не найдено:

POST http://localhost/api/API/searchStreets 404 (Not Found) jquery.min.js:2

Заголовки запроса и ответа c рабочего IIS:

General
Request URL: http://localhost/api/API/searchStreets
Request Method: POST
Status Code: 404 Not Found
Remote Address: [::1]:80
Referrer Policy: strict-origin-when-cross-origin

Response
Cache-Control: private
Content-Length: 5888
Content-Type: text/html; charset=utf-8
Date: Mon, 12 Jul 2021 05:59:41 GMT
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET

Request
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Content-Length: 42
Content-Type: application/json
Host: localhost
Origin: http://localhost
Referer: http://localhost/CollectVoters/Friends/Edit/2
RequestVerificationToken: CfDJ8E_6DbN7jdpPgMFyLYN6J0PjU8Ewi1s5Tg64fud-7zVERV5kkww-ganhbDBSNkCqP0clZJq-gg9qX1Q2VE9QeCt0UVkC3HRK5ZK90ShWU-XI_gl8GPMFuYEWx6jMqmEnCsaLExpFfLGahIcBFwerawCZBPjJvW3xVtw957LVZqgKITcJT2MgNVcE7tC6odseNg
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
X-Requested-With: XMLHttpRequest

Заголовки из IISExpress где работает:

General
Request URL: http://localhost:18246/api/API/searchStreets
Request Method: POST
Status Code: 200 OK
Remote Address: [::1]:18246
Referrer Policy: strict-origin-when-cross-origin

Response
Content-Length: 154
Content-Type: application/json; charset=utf-8
Date: Mon, 12 Jul 2021 06:00:08 GMT
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET

Request
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 36
Content-Type: application/json
Cookie: .AspNetCore.Antiforgery.NZ6FyiZ49-c=CfDJ8P-wVDTJDwxAkxsbTFc3yTYzsWPN5epbkNy1nLxF1PbFJ_77OOUfHD5fCzRhTav9ZwVQ_G43winOHN2gf-rRkd2_kDkrP_4jMfXG2EbizJXIaMUMm-J7zGVRxe3P-PPFlfg_l4CeO4P57j8YEa92GuE; .AspNetCore.Antiforgery.rYXcB0GeWb8=CfDJ8P-wVDTJDwxAkxsbTFc3yTZhm1rK94gmJphiEp7OQQub2xzTyeRGQhnjLOVSvvwyiw-QbxE1XXboY5HhRe3RHQPl9l0OOOJaFFi9cOu5BnnVEKc8shSdqZG_-nvZUb-jozyW5FKN5GN6I-RgJTvhmOo; .AspNetCore.Antiforgery._oiCLMHO3js=CfDJ8P-wVDTJDwxAkxsbTFc3yTZsFLyT789XSnM01ETLUbllI3ydHeiiKMMlDc6zEgEcBK00qxRP9FCiHbW6boEh_4wMq3aj7BQr1qH7ccZg3G7XOJ8i1ijbTDvGVz3UrLeQwoma3doHIvHf2nRKMhKc_Ew; .AspNetCore.Cookie=CfDJ8P-wVDTJDwxAkxsbTFc3yTaAEDiErVCTouZuzD3xKclWQdvIqPRJaddOhg7nKKO4_nH4tORUNkjrHZUJSBGlP_UxLdliDF9hlIMj3MumludzhVIQdGIeYpBuvY-rHmjlO-nIc-z1ghsUJz9SfRyaAedODgQ443gAtvlz7RjlXSDW4G-QyhbckomG_vXykQ2IuCeV5Is4XE-YxFa3n9OeQUfr6vjhB8cennRwDgCZfp9C0-vQPyhtWpfbWiloo33vYoFGhh_209KNsQJvRnAU8YDyB0c-452lG92T7K_Kcdxn; .AspNetCore.Antiforgery.ICxLVdQXzuc=CfDJ8P-wVDTJDwxAkxsbTFc3yTaKcabzzEmO7IDJhaxsghxBr0Ax4L1K2Kdyy3KGxqK54tJBAUdSKO2hTWtzd3fBzverRHiFZGJlEImdTVialJ05JX-lkrLa1zZZmUNxGyeG_TxKcwUEiI4HI3G4Zbh7EXM; .AspNetCore.Antiforgery.sTgLludoNYM=CfDJ8P-wVDTJDwxAkxsbTFc3yTbXW_KPI0r40jABqo2qGCwmhwO5ne6dteUJlgl5-Hof5U_yzzOS9KyGuryNrZmABOGZET3Ty-YuWHwQgF_EUIMW1WpYABeAJK3qzljou8-ZyPzojw9R0UiqF0-xV3gB1qA; .AspNetCore.Antiforgery.XXzoMKtTjbo=CfDJ8OpqRmzr-...
Host: localhost:18246
Origin: http://localhost:18246
Pragma: no-cache
Referer: http://localhost:18246/Friends/Edit/8
RequestVerificationToken: CfDJ8OpqRmzr-59AkS4cNHyMCT05HOKHlzpQPUSVYGTJYeuo9TlB3M9jUCBol-uuHinfrNKvf7I1rd7skRHU_QDMoQnb1uX_HEbOV-rK4WE52T7d-dSTBwuKjdprJpFPNX-RyvdbbrWZ23_NiCkomFgv8bYt2dtoTo8Al_AAB67z7wu5wVjPbJ5nAbR0mRcL_itA8Q
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
X-Requested-With: XMLHttpRequest

Есть предположение, что запросы для mvc-контроллеров и для api-контроллеров приходят на разные порты и поэтому запросы на api не проходят, но как это проверить не знаю. Данное предположение не подтвердилось.

Решение проблемы найдено, но оно не очень удобное. Для запросов на api-контроллеры в url необходимо ещё добавлять адрес самого приложения, т.е. указывать не /api/API/searchStreets, а /CollectVoters/api/API/searchStreets. Это не удобно, потому что на тесте и на проде получаются разные url запросов.

Может кто-нибудь знает как это можно настроить?


Ответы (0 шт):