将用户重定向到外部站点

时间:2015-12-01 10:07:41

标签: c# asp.net-mvc asp.net-mvc-4 url

我想通过简单的锚标记将用户重定向到我的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)这样的东西会很棒。 我自己可以写这个,但不需要重新发明轮子,对吗?因此,如果车轮存在,请提供车轮!提前谢谢!

检查了一堆链接,但是它们不满足我对变量用户输入的需求(从不信任用户!): How to properly encode links to external URL in MVC RazorRedirect to external url from OnActionExecuting?Why does Response.Redirect not redirect external URL?url.Action open link in new window on ASP.NET MVC Page,...

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以使用以下方法轻松扩展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")