Asp.net core cloudflare ssl заблокирован смешанный контент с использованием ненавязчивого ajax

Недавно я создал веб-сайт, который использует бесплатный ssl от Cloudflare. При использовании вызовов ajax для разбивки на страницы я получаю ошибку смешанного содержимого, я полагаю, потому что в какой-то момент она все еще передается по http !? Я попытался использовать инструкции для перенаправления https здесь: https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl, но это просто зациклилось, что привело к ошибке слишком большого количества перенаправлений.

Это конкретная ошибка, связанная со смешанным контентом:

Смешанный контент: страница по адресу 'https://www.andysmobilearchery.co.uk/events/' был загружен через HTTPS, но запросил небезопасную конечную точку XMLHttpRequest 'http://www.andysmobilearchery.co.uk/events/index/?page=2&x-requested-with=xmlhttprequest&=1502287619453». Этот запрос был заблокирован; контент должен передаваться через HTTPS.

Есть ли исправление для этого, или мне придется удалить функции ajax?

Любая помощь приветствуется!

@if (Model.Pager.EndPage > 1)
{
    <ul class="pagination">
        @if (Model.Pager.CurrentPage > 1)
        {
            <li>
                <a asp-controller="Events" asp-action="_Index" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#paged-content" asp-route-page="1" data-ajax-method="GET" asp-route-dfrom="@ViewBag.dfrom" asp-route-dto="@ViewBag.dto" asp-route-search="@ViewBag.search">First</a>
            </li>
                <li>
                    <a asp-controller="Events" asp-action="_Index" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#paged-content" data-ajax-method="GET" asp-route-page="@(Model.Pager.CurrentPage - 1)" asp-route-dfrom="@ViewBag.dfrom" asp-route-dto="@ViewBag.dto" asp-route-search="@ViewBag.search">Previous</a>
                </li>
        }

        @for (var page = Model.Pager.StartPage; page <= Model.Pager.EndPage; page++)
        {
            <li class="@(page == Model.Pager.CurrentPage ? "active" : "")">
                <a asp-controller="Events"asp-action="_Index" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#paged-content" data-ajax-method="GET" asp-route-page="@page" asp-route-dfrom="@ViewBag.dfrom" asp-route-dto="@ViewBag.dto" asp-route-search="@ViewBag.search">@page</a>
            </li>}

        @if (Model.Pager.CurrentPage < Model.Pager.TotalPages)
        {
            <li>
                <a asp-controller="Events" asp-action="_Index" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#paged-content" data-ajax-method="GET" asp-route-page="@(Model.Pager.CurrentPage + 1)" asp-route-dfrom="@ViewBag.dfrom" asp-route-dto="@ViewBag.dto" asp-route-search="@ViewBag.search">Next</a>
            </li>
                <li>
                    <a asp-controller="Events" asp-action="_Index" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#paged-content" data-ajax-method="GET" asp-route-page="@(Model.Pager.TotalPages)" asp-route-dfrom="@ViewBag.dfrom" asp-route-dto="@ViewBag.dto" asp-route-search="@ViewBag.search">Last</a>
                </li>
        }
    </ul>
}

Теперь я заметил, что другие сайты, на которых я это реализовал, работают нормально (3 других!), Я использую шаблон asp.net, который добавляет конечную косую черту к URL-адресам, если я отключу это, страница событий работает, но моя страница отзывов останавливается ... я сбит с толку, лол


person Mark Perry    schedule 09.08.2017    source источник
comment
Конкретное исправление для случая в этом сообщении состоит в том, чтобы просто заставить код выполнять XHR-вызов https://www.andysmobilearchery.co.uk/events/_index/?page=2&x-requested-with=xmlhttprequest&_=1502287619453 вместо этого (то есть с https в качестве части протокола, а не только http). Есть ли что-то, что мешает этому?   -  person sideshowbarker    schedule 09.08.2017
comment
Я использую ненавязчивый ajax, я не знаю о настройке протокола. Я отредактирую свой вопрос, чтобы показать мой cshtml/razor   -  person Mark Perry    schedule 09.08.2017


Ответы (1)


Так что я нашел ответ, вроде.

В моем приложении у меня была опция маршрутизации для добавления косой черты:

    .AddRouting(
        options =>
        {
                // Improve SEO by stopping duplicate URL's due to case differences or trailing slashes.
                // See http://googlewebmastercentral.blogspot.co.uk/2010/04/to-slash-or-not-to-slash.html
                // All generated URL's should append a trailing slash.
                options.AppendTrailingSlash = true;
                // All generated URL's should be lower-case.
                options.LowercaseUrls = true;
        })

Я обнаружил, что отключение этого сработало, однако я не был доволен тем, что эта проблема не возникает на других моих сайтах. В конце концов я скопировал файл startup.cs с рабочего сайта, что устранило проблему, единственная разница, которую я могу найти, заключается в том, что сломанный сайт использует частичный класс для запуска и в файлах, которые составляют остальную часть запуска. Единственным отличием был метод cors, мне он не нужен, поэтому я не знаю, почему он там был, но это не должно было его сломать. Это должно оставаться загадкой какое-то время, так как у меня это работает. Что я собираюсь сделать, так это постепенно воссоздать приложение позже; если я вспомню, я обновлю здесь любые выводы.

person Mark Perry    schedule 09.08.2017