ASP.Net URL 编码

2024-02-18

我正在 ASP.net 中实现 URL 重写,但我的 URL 给我带来了很多问题。

URL 是根据部门和类别的数据库生成的。我希望员工能够使用任何合适的特殊字符将项目添加到数据库中,而不会破坏网站。

我在构建 URL 之前对数据进行编码。

有几个问题...

  1. IIS 在 URL 到达 .net 之前对其进行解码,从而无法正确解析其中包含“/”的任何内容。
  2. ASP.net 对 url 感到困惑,使得“~”在某些页面中毫无用处
  3. 我从内置测试服务器迁移到本地 IIS 服务器(XP 计算机),任何包含编码 & (%26) 的 URL 都会出现“错误请求”错误。
  4. UrlEncode 保留一些中断字符不变,例如“.”

我确实有关于这个主题的另外两篇相关帖子,当时我只看到了小问题,没有看到上游的大问题。我发现了一些注册表技巧来解决“错误请求”问题,但我将部署到共享托管环境,从而使其毫无用处。我还知道这是对某些安全问题的修复,因此我不想在不知道我正在打开什么蠕虫的情况下绕过它。

我不想尝试强制 .net 向我传递原始 url,或覆盖 IIS 设置,而是首先制作真正安全的 URL。

我会注意到我已经尝试过 AntiXss.URLEncode、HttpUtility.URLEncode、URI.EscapeDataString。我什至尝试过像双 URLEncodng 这样愚蠢的事情。是否有一个实用程序可以满足我的需要,或者我真的需要自己推出。我什至正在考虑做一些 Hacky 的事情,比如用不寻常的字符串替换 % 。最终结果至少应该是可读的,这是使用 URL 重写的首要目的。

抱歉发了这么长的帖子——我只是想确保我已经包含了所有必要的细节。我似乎找不到任何相关信息,这似乎是一个常见问题 - 所以也许我错过了一些大的东西。感谢您的帮助以及对长篇解释的耐心!


为了清楚起见编辑:

当我说 URL 是从数据库构建时,我的意思是目录结构是根据数据库中的部门和类别构建的。

一些示例 URL -

Mystore/Refrigeration/Bar+Fridge.aspx
我的商店/烹饪+设备.aspx
我的商店/厨房/切割+Boards.asxpx

当我使用“饮料和酒吧”或“糕点/装饰”等部门来构建我的 URL 时,问题就出现了。尽管首先被编码,但这些都会导致上述问题。

除了特殊字符编码问题之外,我的处理程序已经实现并且工作正常。


您应该考虑在类别/部门表中创建一个表,其中每个类别都有唯一的 URL。然后您可以使用特殊例程来生成 URL。这可以是 SQL 标量函数,也可以是 CLR 函数,但它要做的事情之一就是标准化 Web 的 URL。您可以将“饮料和酒吧”转换为“饮料和酒吧”,将“糕点/装饰”转换为“糕点装饰”。主要是,该例程需要将所有无效的 HTTP URL 字符替换为其他字符。一个例子是这样的:

public static class URL
{
    static readonly Regex feet = new Regex(@"([0-9]\s?)'([^'])", RegexOptions.Compiled);
    static readonly Regex inch1 = new Regex(@"([0-9]\s?)''", RegexOptions.Compiled);
    static readonly Regex inch2 = new Regex(@"([0-9]\s?)""", RegexOptions.Compiled);
    static readonly Regex num = new Regex(@"#([0-9]+)", RegexOptions.Compiled);
    static readonly Regex dollar = new Regex(@"[$]([0-9]+)", RegexOptions.Compiled);
    static readonly Regex percent = new Regex(@"([0-9]+)%", RegexOptions.Compiled);
    static readonly Regex sep = new Regex(@"[\s_/\\+:.]", RegexOptions.Compiled);
    static readonly Regex empty = new Regex(@"[^-A-Za-z0-9]", RegexOptions.Compiled);
    static readonly Regex extra = new Regex(@"[-]+", RegexOptions.Compiled);

    public static string PrepareURL(string str)
    {
        str = str.Trim().ToLower();
        str = str.Replace("&", "and");

        str = feet.Replace(str, "$1-ft-");
        str = inch1.Replace(str, "$1-in-");
        str = inch2.Replace(str, "$1-in-");
        str = num.Replace(str, "num-$1");

        str = dollar.Replace(str, "$1-dollar-");
        str = percent.Replace(str, "$1-percent-");

        str = sep.Replace(str, "-");

        str = empty.Replace(str, string.Empty);
        str = extra.Replace(str, "-");

        str = str.Trim('-');
        return str;
    }
}

您可以将此作为 SQL 增强功能,或将 URL 生成作为单独的进程运行。然后,要实现映射,您可以将整个 URL 直接映射到类别 ID。从长远来看,这种方法更好,原因有几个。首先,您并不总是生成网址,只需执行一次,它们就保持静态,您不必担心您的程序发生变化,然后 GoogleBot 无法找到旧网址。此外,如果发生冲突,您可能会注意到潜在的重复类别名称,因为冲突只会因特殊字符而有所不同。最后,您始终可以从数据库中查看 URL,而无需运行映射函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.Net URL 编码 的相关文章

  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • htaccess 301 重定向 - 删除查询字符串 (QSA)

    我一直在努力处理一些 htaccess 重定向 我只是花了一些时间在堆栈上阅读和搜索 但无法获得适合我的场景的答案 我正在将旧客户端网站的 301 重定向到新客户端 旧页面有参数查询 我想从网址中删除它 menu php idCategor
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 由于“请求缓慢”限制,Azure 网站不断重新启动

    我在西欧和标准模式下设置了一个天蓝色网站 世界标准时间 UTC 今天 2014 年 1 月 30 日凌晨 03 00 突然开始不断重新启动应用程序池 关闭原因是托管环境 我在 eventlog xml 中有很多这样的事件
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • iPhone X 状态栏黑色网络应用程序

    我正在开发一个网络应用程序 并使用模拟器在 iPhone X 上进行测试 状态栏完全是黑色的 如何让我的网站覆盖整个屏幕 我没有使用任何图书馆 我看到很多问题都提到了 Cordova 但我所拥有的只是带有 CSS 的 HTML 这是我的 H
  • 如何在 python ssl.wrap_socket() 中设置/查找 ca_certs 参数

    我正在尝试编写一个 python 2 7 脚本 通过 SSL 或 TLS 套接字连接到服务器 服务器存在并且可以提供其证书等 我找到了以下代码 s socket socket socket AF INET socket SOCK STREA
  • 当 Outlook Web 加载项通过 makeEwsRequestAsync api 发出 GetItem 请求时,接收“ErrorAccessDenied”响应代码

    我们正在使用 Exchange Server 和 Outlook 客户端版本的不同组合来测试 Outlook Web 加载项 该插件使GetItem请求通过makeEwsRequestAsync https dev office com r
  • 使用 Google Maps Javascript API 在我自己的图像上进行捏合缩放

    我正在尝试创建一个适合移动设备的网页 允许用户拖动 img 周围在一个 div 我已经使用了这个工作image ontouchstart方法 现在我想要做到这一点 以便用户在从 iOS 设备查看此内容时可以进行捏合缩放 我当前正在从 iPa
  • 如何配置oauth回调的路由

    我正在使用宝石OAuth2 https github com intridea oauth2与 Google 服务进行通信 我不明白如何实现回调 该回调接收带有 OAuth 代码的响应以获取访问令牌 当我在中设置断点时callback方法
  • 我们可以在 Firestore 中查询多深? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我只是在寻找在 Firestore 上设计数据库的答案 我有根集合的 4 级和 5 级子集合 在这个级
  • Azure 发布管道错误:无法获取 Kudu 应用程序设置。错误:服务暂时不可用(代码:503)

    我有一个 Azure DevOps 发布管道 它将容器部署到 Azure 中的应用程序服务 当我运行它时 部署容器的任务失败并显示消息 2020 10 23T16 12 20 8516547Z 错误 错误 无法获取 Kudu 应用程序设置
  • 使用 Hudson 发布 NUnit 测试结果报告时出现问题

    我在 Hudson 和 NUnit 测试方面遇到问题 当尝试发布 NUnit 的测试结果报告时 Hudson 中的选项 即 发布 NUnit 测试结果报告 会产生问题 我无法提供作业工作区文件夹下已创建的 XML 文件的路径 当我设置文件的
  • 如何配置 persistence.xml 提供者标签

    嘿 我正在学习这些东西 我并没有真正理解所有内容 而且我有一个问题 我不知道在 persistence xml 的提供者标签中写什么 这是我的 persistence xml 和 pom xml 文件 pom xml
  • 如何在运行时将图像加载到WPF?

    在运行时将图像加载到 WPF 窗口似乎相当复杂 Image image image new Uri Bilder sas png UriKind Relative Source new BitmapImage image 我正在尝试这段代码
  • 带百分比标签的 Ggplot 堆积条形图

    I am trying to do a stacked bar plot based on count but with the labels showing the percentage on the plot I have produc
  • 如何在 C++ 中加载共享对象?

    我有一个共享对象 so Windows dll 的 Linux 等效项 我想将其导入并与我的测试代码一起使用 我确信这不是那么简单 但这就是我想做的事情 include headerforClassFromBlah h int main l
  • 如何在 QuickGraph Dijkstra 或 A* 中设置目标顶点

    我使用的是 QuickGraph 3 6 版 我找到了函数 SetRootVertex 但没有 SetTagretVertex 我需要这个 因为我正在巨大的图中搜索短路径 这会大大加快程序速度 有问题的类是 DijkstraShortest
  • C++ 错误:基函数受保护

    我想知道为什么下面的代码不能编译 class base protected typedef void base function type const void function impl const error void base fun
  • 优化字符串连接的聚合[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 Update 对于那些有幽默感的人 您可以假设无论传递给它什么函数 聚合仍然会产生正常结果 包括在被优化的情况下 我编写这个程序是为了构建一
  • DataContract,默认 DataMember 值

    有没有办法在反序列化期间选择不在 xml 文件中的属性的默认值 If the mAgexml 文件中不存在属性 我想使用默认值 18 这可能吗 DataContract public class Person public Person D
  • 如何将触摸事件从 UIView 传递到其下方的 UIView?

    一个简单的问题 但我找不到解决方案 我有 2 个 UIView 一个在同一个父视图中 一个在另一个之上 都有GestureRecognizers在它们上 但只有最顶层正在接收事件 我怎样才能让最上面的视图将他获得的所有手势传递给它下面的其他
  • Golang MySQL 错误 - packet.go:33: 意外的 EOF

    我将整个代码库从 PHP 切换到 Go 在运行的几个进程中 我随机收到此错误 mysql 2016 10 11 09 17 16 packets go 33 unexpected EOF 这是我的 db 包 它处理与数据库的所有连接 pac
  • 有人可以向我解释一些 helm 的用例吗?

    我目前正在使用 kubernetes 并且遇到了 helm 假设我不喜欢用与我的应用程序无关的进程 感染 我的 kubernetes 集群 但如果它有益的话 我很乐意接受 所以我做了一些研究 但我仍然找不到任何使用我的 yaml 描述符和
  • ASP.Net URL 编码

    我正在 ASP net 中实现 URL 重写 但我的 URL 给我带来了很多问题 URL 是根据部门和类别的数据库生成的 我希望员工能够使用任何合适的特殊字符将项目添加到数据库中 而不会破坏网站 我在构建 URL 之前对数据进行编码 有几个