Ich versuche, ein paar Meinungen, die ich in freier Wildbahn gefunden habe, zu versöhnen. Eine Quelle sagt, dass in C# Request.UrlReferrer eine System.UriFormatException auslösen wird, wenn der HTTP-Header fehlerhaft ist. Die andere besagt, dass Request.UrlReferrer in diesem Fall tatsächlich keine Ausnahme auslöst, sondern null zurückgibt.Muss ich mich bei Verwendung von Request.UrlReferrer vor fehlerhaften HTTP-Headern schützen?
Das heißt, ich entwickle eine Webapp, die die Referral URL für zukünftige Referenz erfassen wird. Ich überprüfe es auf Null, so dass der Fehler "nicht auf Instanz eines Objekts gesetzt" bei der Umwandlung in eine Zeichenfolge usw. nicht platzt und dies gut ausgeht. Ich frage mich auch, ob ich Fehlerbehandlung für mögliche System.UriFormatExceptions einschließen sollte.
Hat jemand in das hineingeraten? Vielen Dank!
EDIT: Angesichts NightOwl888's Antwort unten scheint es, dass Ausnahmen auftreten können. Wie oft, ich bin mir nicht sicher, aber ich würde lieber dagegen schützen, als auf einer öffentlichen Site Ausnahmen zu riskieren.
Ich nehme nur die ReferralUrl für die Protokollierung, so dass es nicht in einem nachgelagerten Anwendungskontext verwendet werden wird. Es ist nur grannGiven immer, dass ich vermute, dass der folgende Code sollte mich decken:
Uri referrer = null;
try
{
referrer = Request.UrlReferrer;
}
catch (UriFormatException)
{
referrer = null;
}
catch (Exception)
{
referrer = null;
}
var referralUrl = (referrer != null) ? referrer.ToString() : "None Found";
EDIT: Changed Ausnahmen und hinzugefügt allgemeinen Fang
Wie für Ihre Bearbeitung: Sie sollten 'UriFormatException' (oder um sicher zu sein,' Exception') fangen, weil die Eigenschaft nie eine 'HttpException' werfen wird. Das ist der eine Fall, bei dem es stattdessen "null" zurückgibt, also ist Ihr Ausnahmebehandler ein nicht erreichbarer Ausführungspfad wie er jetzt ist. – NightOwl888
Ja, danke. Ich habe mich geirrt. Ich habe nach meinem letzten Update einen allgemeinen Fang hinzugefügt. Danke noch einmal! – ewomack