2016-06-21 3 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); 
    } 

I 입력이 http://localhost:41343/5d8a2a 같은 단축 링크가, 그것은 나를 대신 www.google.com.br의 http://localhost:41343/www.google.com.br로 리디렉션 : 여기

리디렉션하려고 코드입니다.

답을 확인한 후 편집

, 그것을 작동합니다. 다음은 코드의 마지막 스 니펫입니다.

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

'포함'하지 않습니다. 'StartsWith'를 사용하십시오. –