2016-06-21 15 views
0

私は単純なURLの短縮文字をコーディングしています。RedirectPermanentがURLにリダイレクトしない

リダイレクト以外はすべて機能しています。

public async Task<ActionResult> Click(string segment) 
    { 
     string referer = Request.UrlReferrer != null ? Request.UrlReferrer.ToString() : string.Empty; 
     Stat stat = await this._urlManager.Click(segment, referer, Request.UserHostAddress); 
     return this.RedirectPermanent(stat.ShortUrl.LongUrl); 
    } 

私が入力このhttp://localhost:41343/5d8a2aような短縮されたリンクは、それは私が代わりにwww.google.com.brのhttp://localhost:41343/www.google.com.brにリダイレクトします。ここでは

はリダイレクトしようとするコードです。

EDIT

答えをチェックした後、それが動作します。ここにコードの最後のスニペットがあります。

if (!stat.ShortUrl.LongUrl.StartsWith("http://") && !stat.ShortUrl.LongUrl.StartsWith("https://")) 
      return this.RedirectPermanent("http://" + stat.ShortUrl.LongUrl); 
     else 
      return this.RedirectPermanent(stat.ShortUrl.LongUrl); 

ありがとう!

+0

そして、何 '返しLongUrl'んが、それを追加することができますか? –

+0

@DovydasSopa longUrlは、www.google.com –

+0

を返します.LongUrlにhttp://が含まれている場合は動作します。 URLにhttp://が含まれているかどうかを調べる代わりに、方法がありますか? –

答えて

3

RedirectPermanent()の代わりにRedirect()を使用してみてください。指定されたURLは、アプリケーション内でリダイレクトしようとする絶対URLである必要があります。

あなたはhttp://が存在するかどうかを確認し、それに応じて

if(!stat.ShortUrl.LongUrl.Contains("http://")) 
    return Redirect("http://" + stat.ShortUrl.LongUrl); 

(OR)

使用StartsWith()文字列関数

if(!stat.ShortUrl.LongUrl.StartsWith()("http://")) 
    return Redirect("http://" + stat.ShortUrl.LongUrl); 
+0

同じ問題があります。 http://で絶対URLでない場合は、動作しません。 –

+0

@BrunoXavier、それが役立つ場合は、回答を編集してください。 – Rahul

+2

「Contains」ではありません。 'StartsWith'を使用してください。 –

関連する問題