2017-12-14 38 views
0

webform URL을 .net 코어로 리디렉션하려고합니다. 사용자가 URL에 www.test.com/index.aspx를 입력 말할 수 있습니다, 그것은 어떻게 내가 할 수있는, www.test.com/home/index HomeController에 따라서URL 리디렉션 + ASP.NET 코어 감지

, IActionResult 색인 방법에 리디렉션합니다 index.aspx에서 home/index로 리디렉션 된 것을 감지합니까?

내 연구는 다음과 같은 것이라고 보여 주지만, 그들은

var request = (HttpWebRequest)WebRequest.Create(uri); 
    request.Method = "HEAD"; 
    request.AllowAutoRedirect = false; 

    string location; 
    using (var response = request.GetResponse() as HttpWebResponse) 
    { 
     location = response.GetResponseHeader("Location"); 
    } 

도움말이 감사 그물 코어와 호환되지 않습니다.

답변

1

코드가 .Net Core 1.1과 호환되지 않지만 .Net Core 2.0과 호환됩니다. 그래서 가능한 경우 대상 프레임 워크를 변경하십시오.

코드를 약간 조정해야합니다. 리디렉션이 발생하면 .Net Core HttpWebRequest.GetResponse() 메서드는 WebException을 전달합니다. 그래서 당신은 그것을 캐치 시도하고 WebException.Response을 분석해야합니다 :

try 
{ 
    using (request.GetResponse() as HttpWebResponse) 
    { 
    } 
} 
catch (WebException e) 
{ 
    var location = e.Response.Headers["Location"]; 
} 

것은 내가 대안으로 HttpClient 사용하는 것이 좋습니다 그러나. 그것은 당신이 예외 처리하지 않고 작업을 할 수 있습니다 :

using (HttpClientHandler handler = new HttpClientHandler()) 
{ 
    handler.AllowAutoRedirect = false; 
    using (HttpClient httpClient = new HttpClient(handler)) 
    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri)) 
    using (var response = await httpClient.SendAsync(request)) 
    { 
     var location = response.Headers.Location; 
    } 
} 

HttpClient 접근 방식은 닷넷 코어 1.1 및 2.0 버전을 모두 사용할 수 있습니다.

UPDATEHttpResponseMessage에서 IsRedirected 특성과 유사한 어떤 일이 없다하지만 당신은 그것을 단순 확장 방법을 사용할 수 있습니다

: 답장을 보내

public static class HttpResponseMessageExtensions 
{ 
    public static bool IsRedirected(this HttpResponseMessage response) 
    { 
     var code = response.StatusCode; 
     return code == HttpStatusCode.MovedPermanently || code == HttpStatusCode.Found; 
    } 
} 

bool redirected = response.WasRedirected(); 
+0

감사합니다, 나는 그것으로 노력하고 있지만, 리디렉션을 감지하는 부울이 있습니까? 예 : IsRedirected = true – pavilion

+0

내 대답의 업데이트를 확인하십시오. – CodeFuller

+0

감사합니다. 좋은 답변입니다. – pavilion