Asp Net Перезапись основного URL не загружает CSS JS файлы - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над решением, в котором два приложения размещены в IIS

  1. Приложение 1: размещено в порту 80/443 и доступно для внешней сети. Это обрабатывает все входящие запросы API.
  2. Приложение 2. Размещено в порту 33957 и за брандмауэром (не подвержено воздействию внешней сети).

Оба приложения работают нормально при просмотре.

Поскольку приложение 1 открыто для внешней сети, я написал URL для перезаписи. Когда это приложение получает какой-либо запрос, оно должно переписать его и отправить в приложение 2. Похоже, что это происходит. Однако файлы stati c, такие как css, js, не отображаются в браузере. Как мне разобраться?

Приложение 1: Конфигурация запуска.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        //Other parts of the code removed for clarity//

        //CORS POLICY
        app.UseCors(p => p
        .AllowAnyHeader()
        .AllowAnyMethod()
        .AllowAnyOrigin()
        );

        //REWRITE METHODS
        var rewrite = new RewriteOptions()
                        .Add(new PotreeRewriter());

        app.UseRewriter(rewrite);

        //Other parts of the code removed for clarity//
    }

Перезапись:

Концепция просто. Всякий раз, когда запрашивается URL-адрес с включенной определенной строкой (/ 895da1e9-a065-40df /), я переписываю его на другой URL-адрес, работающий на локальном хосте. Поскольку это перезапись, это происходит на стороне сервера.

public class PotreeRewriter : IRule
{
    public void ApplyRule(RewriteContext context)
    {
        var request = context.HttpContext.Request;

        var full_url = $@"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";
        var url = request.Path.ToString();
        string potreeviewer = @"/895da1e9-a065-40df/";
        // Rewrite to index
        if (url.Contains(potreeviewer) && request.Method == "GET")
        {
            request.Host = new Microsoft.AspNetCore.Http.HostString("localhost", 39987); //Change host value
            request.PathBase = ""; //Remove base, if any
                                   // rewrite and continue processing
            int end_index = url.IndexOf(potreeviewer);
            string to_replace = url.Substring(0, end_index + potreeviewer.Length);
            string new_url = url.Replace(to_replace, "/acl-i/");
            request.Path = new_url;
            full_url = $@"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}";

            var response = context.HttpContext.Response;
            response.StatusCode = StatusCodes.Status200OK;
            response.Headers[HeaderNames.Location] = full_url; //Just to see if it is reaching correct location. Will remove later.
            context.Result = RuleResult.EndResponse;

        }
    }
}

Результаты из браузера

Я попытался найти определенный файл css, используя прямой URL, а также используя метод перезаписи. Ниже приведены мои результаты.

Прямой URL

enter image description here

Переписать URL

enter image description here

Видно, что при перезаписи URL контент не получен. Как мне это отсортировать? Где я ошибся?

1 Ответ

0 голосов
/ 13 апреля 2020

Вам необходимо добавить следующую запись в ваш файл web.config в элементе "system.webServer":

<modules runAllManagedModulesForAllRequests="true" />
...