我需要重写,而不是将某些请求重定向到GET文件到外部存储位置(位于其他域)
我能够通过使用重写器中间件进行重定向来实现此目的,但是我想改写。
我需要使用一些逻辑来重写到特定的文件位置,因此我遵循了https://docs.microsoft.com/en-us/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-2.0&tabs=aspnetcore2x#method-based-rule教程。
当我设置主机和路径时,我可以看到绝对URL看起来正确,但是当该方法退出时,我得到“找不到该网址的网页:”,并且显示的URL是原始请求网址
RewriteRule.cs(在我不想使用的ApplyRule()中也包含重定向网址逻辑)
public static void RewriteStorageFileRequests(RewriteContext context)
{
var request = context.HttpContext.Request;
var path = request.Path.Value;
if (path.Contains("foo/bar"))
{
context.Result = RuleResult.SkipRemainingRules;
request.Host = new HostString("storage/space");
request.Path = path.Replace("foo/bar", string.Empty);
var test2 = request.GetDisplayUrl();
}
}
从本质上讲,如果打进来的电话是:
https://localhost:44327/foo/bar/bf34d911-03db-5tda-9c99-c7dd96593159/w3.jpg
我想将其重写为:
https://storage/space/bf34d911-03db-5tda-9c99-c7dd96593159/w3.jpg
Startup.cs
app.UseRewriter(new RewriteOptions().Add(RewriteUrlRule.RewriteStorageFileRequests));
test2在调试器中显示正确的URL。
我尝试将host设置为空字符串,并在路径中传递host值(存储/空间),但还是没有运气。
更新:我可以通过更改来重写工作
context.Result = RuleResult.SkipRemainingRules;
到
context.Result = RuleResult.EndResponse;
但是,当我进入Url时,它返回200OK,但不显示图像。 (请参见附件)
所以,现在我获取图像的唯一方法仍然是使用重定向