在查询参数中重写正斜杠

时间:2017-04-02 12:45:20

标签: c# asp.net-core asp.net-core-mvc kestrel-http-server

在我的asp.net核心应用程序(角度4前端)中,我接受这样的URL:

example.com/report;url=http%3A%2F%2Fexample2.com

我想创建一个允许人们输入以下网址的重写规则:

example.com/report;url=http://example2.com

我无法了解如何执行此操作。

我试过了:

var options = new RewriteOptions()
    .AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false)
    .AddRewrite(@"^report.*", "index.html", skipRemainingRules: true)

app.UseRewriter(options);

这没有用,但即使这样做也不会解释在域之后有斜杠的网址,即子目录。使用组匹配模式我认为这是不可能的。它需要是一个发现&替换匹配组上的类型操作。

其他网络服务器将此作为解码斜杠的可配置选项。我在asp.net核心文档中找不到任何引用。这可能吗?

2 个答案:

答案 0 :(得分:0)

您想要传递URL的参数。通过允许用户在地址栏中输入URL作为参数,实际上无法获得您想要的结果。它总是需要编码。

而不是:

http://example.com/report;url=http%3A%2F%2Fexample2.com

使用:

http://example.com/report?url=http%3A%2F%2Fexample2.com

我不是让用户将所有这些输入到浏览器地址栏中,而是创建一个用户界面,允许用户请求报告并点击提交。该报告需要一个URL文本框,它会在将URL文本框的内容编码到“网址”后向您的网站发送获取请求。参数。

使用URL重写模块可能违背了这个问题。

答案 1 :(得分:0)

不幸的是,根据RewriteRule类的代码,它是不可能的。您应该能够创建自己的自定义重写规则,通过该规则实现IRule接口和URL编码部分请求路径。

可以在此处找到RewriteRule的源代码 https://github.com/aspnet/BasicMiddleware/blob/dev/src/Microsoft.AspNetCore.Rewrite/Internal/RewriteRule.cs

以下是UrlEncoder对' url'的值进行编码 https://github.com/dotnet/corefx/blob/master/src/System.Text.Encodings.Web/src/System/Text/Encodings/Web/UrlEncoder.cs