将用户重定向到外部站点

本文关键字:外部 站点 重定向 用户 | 更新日期: 2023-09-27 18:25:14

我想通过一个简单的锚标记将用户重定向到我的 ASP.NET MVC 应用程序之外的外部站点。棘手的部分是,用户可以自己输入链接。

<a href="@model.Url">up up and away!</a>

如果用户在字段中输入:www.google.com(错误用户(,则会将其重定向到http://www.example.com/page/www.google.com 。这是完全可以理解的,他应该在他的链接前面使用http://......

如果我像这样对链接前面的http://进行硬编码,它会按预期工作:<a href="http://@model.Url">up up and away!</a>

但是,如果用户输入http://www.google.com(好用户(,浏览器将重定向到无处可去http://http//www.google.com

所以现在的问题是:无论链接是否包含http://,是否有一个帮助程序或方法或东西可以路由到外部站点?像@Url.ExternalLink(model.Url)这样的东西会很棒。我可以自己写这个,但没有必要重新发明轮子,对吧?所以如果轮子存在,请提供轮子!提前感谢!

检查了一堆链接,但它们不能满足我对可变用户输入的需求(永远不要相信用户!如何在MVC Razor中正确编码指向外部URL的链接,从 OnActionExecuting 重定向到外部 url?,为什么 Response.Redirect 不重定向外部 URL?,网址。操作打开链接 ASP.NET 在MVC页面上的新窗口中,...

将用户重定向到外部站点

您的用例非常具体,MVC 框架对此没有任何扩展方法。您需要自己开发它。您有以下选项:

  1. 为类创建扩展方法(如您所提到的UrlHelper - @Url.ExternalLink(model.Url)
  2. 创建HtmlHelper - @Html.ExternalLinkFor(model => model.Url)的扩展方法
  3. 由于 url 来自您的模型,因此您可以在传递给 View 之前对其进行验证/修改。在这种情况下,<a href="@model.Url">up up and away!</a>仍然有效。
  4. 将正则表达式验证器添加到用户在其中键入 url 的视图

您可以使用以下方法轻松扩展 UrlHelper:

public static string ExternalLink(this UrlHelper helper, string uri)
{
    if (uri.StartsWith("http://")) return uri;
    return string.Format("http://{0}", uri);
}

例子

@Url.ExternalLink("http://google.com")
@Url.ExternalLink("google.com")