ASP.NET'te HTTP Yönlendiriciyi Alma


103

Ben tarayıcının almanın hızlı, kolay ve güvenilir yol arıyorum HTTP Yönlendiren içinde ASP.Net ( C # ). Ben HTTP Yönlendiren kendisi güvenilmez olduğunu biliyorum, ama eğer yönlendirme almanın güvenilir bir yol istiyoruz olan mevcut.



Yanıtlar:


166

Mevcut isteğin UrlReferrer özelliğini kullanabilirsiniz :

Request.UrlReferrer

Bu , İstemci (kullanıcı aracısı) tarafından sağlanabilecek veya sağlanmayabilecek istekten Yönlendiren HTTP başlığını okuyacaktır .


8
Bu özelliğin, yönlendiren HTTP üstbilgisi hatalı biçimlendirilmişse bir System.UriFormatException oluşturacağına dikkat edilmelidir.
NightOwl888

1
@Darin Dimitrov WEB API kullanarak bir REST API oluşturmaya çalışıyorum. UrlReferrer, İstek nesnesinin bir parçası değildir. Biraz "kullanma" vb. Eklemeli miyim? Neyi kaçırıyorum? DLL mi?
Ravi

1
Farkın yazımların doğru olduğu unutulmamalıdır. Http başlığı yanlış yazılmış. MS, özellik adında doğru yazımı kullanır. Ne yazık ki, ikisi eşleşmiyor, bu da bazı insanların (ben) test ederken kafa karışıklığına neden olabilir.
John

8
Request.UrlReferrerSunucu tarafı geri göndermeden sonra kullanıyorsanız dikkatli olun . Elbette Request.UrlReferrer, geri gönderdiğiniz sayfanın değeri artık elbette olacaktır. Çoğu durumda, insanların önceki sayfaya ihtiyacı vardır. Bu durumda, önceki sayfayı, sayfa ilk yüklendiğinde bir görünüm durumu değişkeninde sakladığınızdan emin olun. Ve sonra bu değişkene eriştiğinizde, geldiğiniz önceki sayfaya sahip olursunuz. Örneğin, asp.net formlarında sayfa yükleme olayında şunları yapabilirsiniz:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
JonH

4
... ve örneğin geri Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
gönderi paylaştığınızda şunları

20

Request.UrlReferrerMülkü kullanın .

Sahnelerin altında sadece ServerVariables("HTTP_REFERER")mülkü kontrol ediyor .


2
Yani şunu kullanırsam farklı olmazdı: HttpContext.Current.Request.ServerVariables ["HTTP_REFERER"]?
Chuck Le Butt

2
Teoride hiçbir fark yok, pratikte kesin olarak söyleyemem çünkü reflektörle hızlı bir bakış, UrlReferrerbasit bir çağrıdan çok daha fazlasını yaptığını gösteriyorServerVariables("HTTP_REFERER")
Diadistis

13
Bunun ServerVariables["HTTP_REFERER"]bir dizeRequest.UrlReferrer döndürdüğünü , ancak bir Uri döndürdüğünü söyleyebilirim .
Chuck Le Butt

19
Request.Headers["Referer"]

Açıklama

Request.UrlRefererTesiste atacağım System.UriFormatExceptionreferer HTTP başlık hatalı olup olmadığını (o sizin kontrolünüz altında genellikle olmadığından hangi olabilir).

Kullanmaya gelince Request.ServerVariables, MSDN'ye göre:

Request.ServerVariables Koleksiyonu

ServerVariables koleksiyonu, önceden belirlenmiş ortam değişkenlerinin değerlerini ve talep başlık bilgisini alır.

Request.Headers Özelliği

HTTP üstbilgilerinin bir koleksiyonunu alır.

Request.Headersdaha iyi bir seçimdir Request.ServerVariables, çünkü Request.ServerVariablesiyi başlıklar gibi ortam değişkenleri tümünü içeren Request.Headerstek başlıklarını içerdiğini çok daha kısa bir listesidir.

Dolayısıyla en iyi çözüm, Request.Headerskoleksiyonu doğrudan değeri okumak için kullanmaktır . Yine de, bir formda görüntüleyecekseniz, değeri HTML kodlamasıyla ilgili Microsoft'un uyarılarına dikkat edin.


2
RefererBaşlığın HTTP_REFERRERsunucu değişkeninden farklı yazıldığına dikkat edin .
Rudey

13

Bunun gibi: HttpRequest.UrlReferrer Property

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();

2
Null değerine karşı koruma sağlamak için şunu söyleyebilirsiniz: string gerçek = "" + Request.UrlReferrer ?? "(varsayılan)"; // (varsayılan) boş dize olabilir
Sheepy

10

.Net Core 2 mvc kullanıyorum, bu benim için çalışıyor (önizleme sayfasını almak için):

HttpContext.Request.Headers["Referer"];

9

C# Web API ReferrerBurada arama yaparken Google sizi bu gönderiye götürdüğünden , anlaşma şu şekildedir: içermeyen normal çağrılandan Web APIfarklı bir tür kullanır . Normal bir talep bu bilgileri içermediğinden, gerçekten ihtiyacınız varsa, müşterilerinizin bunu dahil etmek için ellerinden geleni yapmasını sağlamalısınız. Bunu kendinizin bir parçası haline getirebilseniz de , daha iyi bir yol kullanmaktır .RequestMVC RequestHttpRequestMessageUrlReferrerWeb APIAPI ObjectHeaders

İlk olarak, HttpRequestMessagebir UrlReferrer()yöntem sağlamak için genişletebilirsiniz :

public static string UrlReferrer(this HttpRequestMessage request)
{
    return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}

Ardından müşteri ayarlamanız gerekir Referrer Headergeçen ay API Request:

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);

Ve şimdi, Web API Requestşu şekilde erişebileceğiniz yönlendiren verilerini içerir Web API:

Request.UrlReferrer();

2
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();

1
Bu ApiController içindir. Gerçi ihtiyacım olan buydu.
Csaba Toth

2

Bazen tüm bağlantıyı böyle vermelisin

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

("Mevcut" kurulmadığında seçenekte)


0

Diğer yanıta ait olarak, boş almak için koşul cümlesi ekledim.

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.