将用户重定向到外部站点
本文关键字:外部 站点 重定向 用户 | 更新日期: 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 框架对此没有任何扩展方法。您需要自己开发它。您有以下选项:
- 为类创建扩展方法(如您所提到的
UrlHelper
-@Url.ExternalLink(model.Url)
- 创建
HtmlHelper
-@Html.ExternalLinkFor(model => model.Url)
的扩展方法 - 由于 url 来自您的模型,因此您可以在传递给 View 之前对其进行验证/修改。在这种情况下,
<a href="@model.Url">up up and away!</a>
仍然有效。 - 将正则表达式验证器添加到用户在其中键入 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")