在NetCore 2重写中间件中修改RewriteContext Host

时间:2019-01-10 16:42:52

标签: url-rewriting asp.net-core-2.0 middleware

我需要重写,而不是将某些请求重定向到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值(存储/空间),但还是没有运气。

Before Rewriter

After Rewrite

更新:我可以通过更改来重写工作

context.Result = RuleResult.SkipRemainingRules;

context.Result = RuleResult.EndResponse;

但是,当我进入Url时,它返回200OK,但不显示图像。 (请参见附件)

所以,现在我获取图像的唯一方法仍然是使用重定向

Rewrite GET

0 个答案:

没有答案