【问题标题】:Rewriting forward slashes in a query parameter重写查询参数中的正斜杠
【发布时间】:2017-08-27 08:47:46
【问题描述】:

在我的 asp.net 核心应用程序(angular 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);

这没有用,但即使它成功了,它也不会考虑在域后有斜杠的 url,即子目录。使用组匹配模式我认为这是不可能的。它需要是对匹配组的查找和替换类型操作。

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

【问题讨论】:

  • AFAIK 您必须在 .net-core 应用程序和 Internet 之间使用反向代理。我为此使用了 Nginx。您是否尝试过在那里进行重写?我认为它应该工作。顺便说一句,使用目录作为其他东西不是一个好主意,除非它们与您的 MVC 结构相关,但是您不会使用重写,您会将模式与控制器匹配(或者对于简单的 CMS,使用 1 个控制器来匹配所有内容然后在控制器中处理 URL-s)。如果使用 MVC,您可以在需要时返回 Redirect 响应。
  • 您在哪里托管您的应用程序? IIS、nginx、自托管?
  • 为什么不能使用查询字符串来实际保存参数,即使用? 并将您的URL 更改为example.com/report?url=http://example2.com?然后您可能根本不需要任何 URL 重写。
  • @SergGr 我不明白你的意思。 url 已经是一个查询参数
  • @Guerrilla,如果您的网址实际上与您的示例完全相同,那么不会。根据RFC 3986query 是?(问号)之后的部分,这是大多数Web MVC 框架在执行路由和参数解析时所期望的。附言这似乎与 KyleB 建议的相同

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


【解决方案1】:

您将要为 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 重写模块可能会违反规定。

【讨论】:

  • 我当然会在我的应用程序中传递参数。这不是问题。在其他网络服务器中,可以解码 url 中的斜杠以允许我请求的链接。我的问题是关于如何在 kestrel/asp.net 核心中做到这一点。
  • 我正在使用角度路由,所以我需要使用矩阵查询参数样式
【解决方案2】:

不幸的是,基于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2015-02-26
    • 2016-01-08
    • 2018-02-27
    • 2021-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多