2017-03-04 2 views
0

Ich habe http://example.com/Image/Show/CwYDBw8LDww wo example.com ist meine Website, Show ist eine Methode in der Bild-Controller, die eindeutige ID CwYDBw8LDww ist ein Schlüssel in einer Datenbank, die auf eine andere URL in einer anderen Domäne verweist, z ein "gehostetes" Bild bei Google.MVC - Laden Sie ein Bild auf der Seite von einem "verkürzten" Code auf meiner Domain (wie Bit.ly mit Links tut)

Der Grund dafür ist, dass die URLs schrecklich lang und unhandlich werden können. Ich bin Speichern der Inhalte wie Markdown/HTML und wollen in der Lage sein, die Dinge zu schreiben wie:

<p>Here is an image of a cat.</p>  
<img src="http://example.com/Image/Show/CwYDBw8LDww"> 

und haben es die Seite machen, als ob ich gesagt:

<img src="http://googleusercontent.com/SomeReallyReallyReallyLongImageURL.jpg"> 

So in der Datenbank gibt ist ein Tabelleneintrag mit Werten :("CwYDBw8LDww", "http://googleusercontent.com/SomeReallyLongImageURL.jpg"), so weiß ich, welche "wirklich lange URL" zum Funktionscode gehört.

Ich weiß, wie man (zB) die 'google' URL auf den Bildschirm druckt, indem man eine Aktion bekommt, um es zurückzusenden, ich kann schon mit der Datenbank reden usw. Der Teil, den ich vermisse, wird /Images/Show?shortcode=CwYDBw8LDww Bring das Google-Bild so zurück, dass es auf der Seite gerendert werden kann. Und ob ich das in der View machen sollte oder was?

Meine Ansicht hat derzeit so etwas wie:

@Html.Raw(@Model.ArticleContent) 

, wo der Inhalt bereits als usw.

+0

Ich habe die Frage selbst beantwortet, da ich jetzt funktioniert habe. Ich hatte aufgelegt, dass es ein "Bild" war, das ich in eine Webseite einbettete, anstatt eine Seitenumleitung auf "Top Level", dh Seite, die der Browser in der Adressleiste etc. zeigt Anfrage ist wirklich nur eine Anfrage, egal welchen "Typ" der Antwort ich gelöst habe. – seventyeightist

Antwort

0

ich es gelöst mich mit ein wenig Geduld und Forschung gespeichert! Ich habe meinem Image-Controller Folgendes hinzugefügt.

public RedirectResult Show(string shortcode) 
{ 
    return Redirect(data.GetURL(shortcode)); 
} 

wo GetURL() ein Verfahren, in meiner Datenzugriffsschicht ist, die die Datenbank für die „lange“ URL fragt, die auf die Shortcode gilt. (I behandeln Fälle wie wenn der Shortcode existiert nicht in dem GetURL() Code, so Show() nimmt sie eine gültige URL angegeben wurde.)

Dies gibt eine 302 „Temporary Redirect“ HTTP-Antwort auf Re-Punkt den Client die neue URL (Google in meinem Beispiel).

Diese SO question and answers war hilfreich, um zu dem Konzept zu gelangen, das ich brauchte.

Verwandte Themen