[英]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.