检测URL重定向 ASP.NET核心



我正在尝试将WebForm URL重定向到.NET Core。假设用户输入 www.test.com/index.aspx 在URL中,它将重定向到 www.test.com/home/index

因此,在"归档"中,我如何检测到它是从index.aspx重定向到家庭/索引的?

我的研究表明,这将是下面的,但它们与.NET Core

不兼容
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();

最新更新