簡體   English   中英

將用戶重定向到外部站點

[英]Redirecting user to external site

我想通過一個簡單的定位標記將用戶重定向到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? url.Action在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. 在用戶輸入網址的視圖中添加正則表達式驗證器

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM