ASP.NET MVC 컨트롤러에서 외부 URI로 리디렉션


170

액션 메소드에서 외부 URL로 리디렉션하려고하지만 작동하지 않습니다. 아무도 내 잘못을 밝힐 수 있습니까?

public void ID(string id)
    {
        string url = string.Empty;
        switch (id)
        {
            case "DB2FCB11-579F-4DA2-A68C-A6495B9BAAB5":

                url = "http://www.somesite.com";
                break;
        }
        Response.Redirect(url, true);
    }

고마워 크리스


1
당신의 오류는 무엇입니까? 아니면 증상? 어디든 가나 요?
Paul Sasik

답변:


342

ASP.NET MVC에 대해 이야기하고 있다면 다음을 반환하는 컨트롤러 메서드가 있어야합니다.

return Redirect("http://www.google.com");

그렇지 않으면 리디렉션에서 발생하는 오류에 대한 추가 정보가 필요합니다. URL이 비어 있지 않은지 확인하기 위해 단계별로 진행합니다.


5
선택적으로 대신이 작업을 수행 할 수 있습니다. return new RedirectResult ( "yourURL", true); 거의 정확히 동일하지만 마지막에 영구 리디렉션인지 여부를 나타내는 매개 변수를 제공합니다 (HTTP 301 대 다른 것, 307일까요?)
ctb

@ Mr.Pichler 302 일 가능성이 높지만 항상 Fiddler를 통해 확인할 수 있습니다.
Yuriy Faktorovich

1
리디렉션 (rul)은 302이고 RedirectPermanent (url)은 301입니다. 확인 : stackoverflow.com/questions/17517318/…
TNT

로컬 HTML 파일로이 작업을 수행 할 생각이 있습니까? 작동하지 않습니다 :> return Redirect ( "C : /Users/Me/Documents/test.html");
Steve Eggering


15

자바 스크립트 사용

 public ActionResult Index()
 {
    return Content("<script>window.location = 'http://www.example.com';</script>");
 }

참고 : @Jeremy Ray Brown이 말했듯이, 이것이 최선의 선택은 아니지만 일부 상황에서는 유용 할 수 있습니다.

도움이 되었기를 바랍니다.


1
이와 같은 것이 작동 할 수 있지만 컨트롤러가 수행 할 작업을 결정합니다. 참여할 스크립트가 필요하지 않습니다.
Jeremy Ray Brown

6
믿거 나 말거나,이 접근법과 같은 것이 나에게 도움이되었습니다. 우리는 모든 곳에서 오래된 웹 양식 코드가 많은 하이브리드 ASP.NET MVC / AngularJS 응용 프로그램을 보유하고 있습니다. Angular 라우팅을 사용하는 URL로 리디렉션하는 데 비슷한 것을 사용했습니다. 각도 라우팅은 URL에서 # 표시를 따르므로 클라이언트 측에서만 인식되므로 이러한 URL에 리디렉션을 사용할 수 없습니다.
thesentiment

@TNT 예 당신은 맞습니다. 방금 이것을 옵션으로 제공했는데 다른 사람들에게 유용 할 수 있습니다.
shaijut

1
@stom을 정중하지 않은 경우 죄송합니다. Google 웹 로그 분석 방문 1 회와 같이 리디렉션이 포함 된 스크립트를 실행해야하는 경우이 방법을 사용합니다.
TNT

이것은 마침내 작동합니다. @Yuriy의 간단한 리디렉션 솔루션이 실패했습니다. 보안상의 이유로 MVC 응용 프로그램으로 향하는 요청은 프록시 서버 (재 작성 추가 기능 + 재 작성 규칙이있는 IIS)를 통해 크롤링해야합니다. 이 조합은 아마도 리디렉션 URL을 망칠 것입니다. 즉. 나는에서 리디렉션 할 때 example.com/actionexample.org/?search=xyz , 사용 return Redirect("https://www.example.org/?search=xyz");결과를하기로 리디렉션입니다 example.com/?search=xyz .
Kraken101

0

어쩌면 누군가가 찾고있는 해결책은 다음과 같습니다.

Response.Redirect("/Sucesso")

이것은 뷰에서도 사용될 때 작동합니다.



-3

이것을 시도하십시오 (홈 컨트롤러 및 인덱스 뷰를 사용했습니다).

return RedirectToAction("Index", "Home");

외부 URI로 리디렉션되지 않고 홈 컨트롤러의 인덱스 작업으로 리디렉션됩니다.
Anthony Potts
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.