I\'m looking for a quick, easy and reliable way of getting the browser\'s HTTP Referrer in ASP.Net (C#). I know the HTTP Referrer itself is unreliable, but I do want a reliable way of getting the referrer if it is present.
问题:
回答1:
You could use the UrlReferrer property of the current request:
Request.UrlReferrer
This will read the Referer HTTP header from the request which may or may not be supplied by the client (user agent).
回答2:
Use the Request.UrlReferrer
property.
Underneath the scenes it is just checking the ServerVariables(\"HTTP_REFERER\")
property.
回答3:
Request.Headers[\"Referer\"]
Explanation
The Request.UrlReferer
will throw a System.UriFormatException
if the referer HTTP header is malformed (which can happen since it is not usually under your control).
As for using Request.ServerVariables
, per MSDN:
Request.ServerVariables Collection
The ServerVariables collection retrieves the values of predetermined environment variables and request header information.
Request.Headers Property
Gets a collection of HTTP headers.
Request.Headers
is a better choice than Request.ServerVariables
, since Request.ServerVariables
contains all of the environment variables as well as the headers, where Request.Headers
is a much shorter list that only contains the headers.
So the best solution is to use the Request.Headers
collection to read the value directly. Do heed Microsoft\'s warnings about HTML encoding the value if you are going to display it on a form, though.
回答4:
Like this: HttpRequest.UrlReferrer Property
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
回答5:
Since Google takes you to this post when searching for C# Web API Referrer
here\'s the deal: Web API
uses a different type of Request
from normal MVC Request
called HttpRequestMessage
which does not include UrlReferrer
. Since a normal Web API
request does not include this information, if you really need it, you must have your clients go out of their way to include it. Although you could make this be part of your API Object
, a better way is to use Headers
.
First, you can extend HttpRequestMessage
to provide a UrlReferrer()
method:
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? \"unknown\" : request.Headers.Referrer.AbsoluteUri;
}
Then your clients need to set the Referrer Header
to their API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
And now the Web API Request
includes the referrer data which you can access like this from your Web API
:
Request.UrlReferrer();
回答6:
I\'m using .Net Core 2 mvc, this one work for me ( to get the previews page) :
HttpContext.Request.Headers[\"Referer\"];
回答7:
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
回答8:
Sometime you must to give all the link like this
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(in option when \"Current\" not founded)