在我的 asp.net 核心应用程序(angular 4 前端)中,我接受这样的 URL:
example.com/report;url=http%3A%2F%2Fexample2.com
我想创建一个重写规则,允许人们输入以下 url:
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);
这不起作用,但即使它起作用了,它也不会考虑在域后有斜杠的 url,即子目录。使用组匹配模式我认为这是不可能的。它需要是对匹配组的查找和替换类型操作。
其他网络服务器将此作为解码斜杠的可配置选项。我在 asp.net 核心文档中找不到对它的任何引用。这可能吗?
最佳答案
您将要为 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”参数后向您的网站发送一个获取请求。
使用 URL 重写模块可能违背了这里的原则。
关于c# - 重写查询参数中的正斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43168482/