我正在研究在IIS中托管两个应用程序的解决方案
两个应用程序在浏览时都可以正常工作。
由于应用程序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
重写URL
可以看出,在重写URL中,未接收到内容。我该如何排序?我在哪里弄错了?
您需要在“ system.webServer”元素内将以下条目添加到您的web.config文件中:
<modules runAllManagedModulesForAllRequests="true" />