【问题标题】:Does ASP.NET have an extension point through which all URL generation code is passed?ASP.NET 是否具有传递所有 URL 生成代码的扩展点?
【发布时间】:2014-06-21 07:21:26
【问题描述】:

我正在寻找一种方法来更改调用UrlHelperControl.ResolveUrl() 上的许多方法生成的URL,这种方法对开发人员来说是完全透明的。

主要方案是向 URL 添加语言“标签”。开发人员像往常一样创建到操作或到 ASPX 页面的链接,但是 URL 生成被“拦截”以使链接“语言感知”可以这么说。我不希望看到这种跨领域关注“泄漏”到代码中。 (当用户点击链接时,URL 中的语言标签被解释,请求被重写,所以它“正常工作”。)

ASP.NET 是否具有执行此操作所需的扩展点?换句话说:我可以注册什么样的类(以及我在哪里注册)在生成 URL 时总是被调用?

粗略浏览aspnetwebstack.codeplex.com 的源代码表明,ASP.NET 最终依赖于VirtualPathUtility 类,但与VirtualPathProvider(用于将传入的 URL 解析到磁盘上的文件)不同,它无法实现(它是一个静态类)。

【问题讨论】:

  • 您也不能更改 URL,但可以更改它们的解释方式
  • @JohnSaunders 你能详细说明一下吗?
  • 不是我最喜欢的处理 url 的方式,但看看:iis.net/downloads/microsoft/url-rewrite。这发生在 IIS 级别。否则,您正在寻找的课程是您不想出于 w/e 原因使用的课程,这就是路由。我建议通过 url 重写路由,它更易于管理,但如果你想要快速的东西来一次性使用 url rewrite。
  • Global.asax 可以提供帮助,请看这里:stackoverflow.com/questions/15107213/rewrite-url-in-asp-c-sharp/…
  • 这些是处理/解释传入请求的好例子。我更关心的是为页面上的超链接生成一致的 URL。

标签: asp.net


【解决方案1】:

这很讨厌,但您可以注册一个 http 模块,该模块 greps/string 将您的响应中的 URL 替换为您需要的内容。这将涉及使用一系列正则表达式来获取发出的 html 并用您需要的内容进行交换,如果您可以在 URL 中添加一个占位符,这将更加容易。

除了编写自己的定制方法,然后用他们的对应方法进行查找和替换之外,不会太繁重。

如果您可以标记要替换的方法并可以将实例数据放入其中(不确定这是一个入门者),那么即使 AOP 也可能有用。

或者自定义属性怎么样,可以在页面上枚举并传入页面实例以获得更细粒度的控制(类似于域对象验证器的工作方式),从而可以访问包含有问题的 URL 的控件和操纵。

【讨论】:

  • 是的,我真的在寻找一种方法来“仅”使用 UrlHelper.Action() 之类的东西,并让它返回附加了语言标签的 URL。
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 2013-02-14
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多