簡體   English   中英

檢測URL重定向+ ASP.NET Core

[英]Detect URL redirection + ASP.NET Core

我正在嘗試將網絡表單網址重定向到.net核心。 假設用戶在URL中輸入了www.test.com/index.aspx ,它將重定向到www.test.com/home/index

因此,在HomeController的IActionResult Index方法中,如何檢測到它已從index.aspx重定向到home / index?

我的研究表明,情況可能會如下所示,但它們與.net核心不兼容

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");
    }

感謝幫助。

您的代碼與.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方法適用於.Net Core 1.1和2.0版本。

UPDATE

HttpResponseMessage沒有類似於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();

暫無
暫無

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

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