Asp Net Core URL重写未下载CSS JS文件

问题描述 投票:0回答:1

我正在研究在IIS中托管两个应用程序的解决方案

  1. 应用程序1:托管在端口80/443中,并且可以通过外部网络访问。这将处理所有传入的API请求。
  2. 应用程序2:托管在端口33957中,并且位于防火墙之后(不暴露于外部网络)。

两个应用程序在浏览时都可以正常工作。

由于应用程序1暴露于外部网络,所以我写了一个重写URL。无论何时,此应用程序都会收到一些请求,它必须重写并将其发送给应用程序2。似乎正在发生这种情况。但是,静态文件(如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;

        }
    }
}

浏览器的结果

我试图使用直接url并使用重写方法来访问特定的CSS文件。以下是我的结果。

直接URL

enter image description here

重写URL

enter image description here

可以看出,在重写URL中,未接收到内容。我该如何排序?我在哪里弄错了?

asp.net iis .net-core url-rewriting url-rewrite-module
1个回答
0
投票

您需要在“ system.webServer”元素内将以下条目添加到您的web.config文件中:

<modules runAllManagedModulesForAllRequests="true" />
© www.soinside.com 2019 - 2024. All rights reserved.