2017-04-26 4 views
0

Wenn ein HTTP-Anruf tätigt, Angular hackt den Hash und alles danach aus.Angular 4 http get - Entfernen von Hash von url

Beispiel:

http://sub.domain.com/api/$metadata#EndpointName 

... wird

http://sub.domain.com/api/$metadata 

nicht in der Lage, einen Weg finden Eckige mitzuteilen, den URL zu ändern. Irgendwelche Ideen?

Momentan wird Angular 4.0.0 verwendet.

+0

Das ist, was passieren soll, es ist nur das Fragment-Kennung. Mit welcher API sprechen Sie? – jonrsharpe

+0

Wir verwenden RESTier http://odata.github.io/RESTier/ für unsere API und verwenden den Hash in der URL, um den Endpunkt anzugeben, für den Sie Metadaten haben möchten. Es ist merkwürdig, aber so machen sie es. – Difinity

+0

Ich suchte in diesem Dokument nach "hash" und konnte es nicht finden. Haben Sie eine spezifischere Seite/Stelle in diesem Dokument, in der erläutert wird, wie der Hash verwendet wird? – DeborahK

Antwort

1

Zunächst einmal wird der Hash-Symbol verwendet, um eine Position innerhalb des aktuellen Dokuments zu identifizieren, zu dem Sie suchen möchten, so verwenden sie einen Endpunkt auf dem Server zu bezeichnen ist semantisch falsch.

Sie sollten Abfrageparameter für sie anstatt auf mit dem Hash verwenden. Zum Beispiel http://sub.domain.com/api/$metadata?endpoint=EndPointName

Soweit ich weiß, die Hash-Zeichen Strippen Winkel Implementierung des Http Modul

+0

Ja, dem stimme ich voll und ganz zu. Nachdem dies gesagt wurde, wird die URL-Syntax von RESTier definiert, und ich habe keine Kontrolle darüber. Best Practice oder nicht, muss ich immer noch diese URL-Syntax verwenden, um die API-Metadaten zu erhalten. – Difinity

+0

@Difinity Das klingt ziemlich schlecht für mich. Ich denke, Sie sollten nur Ihren eigenen HTTP-Client in diesem Fall rollen – Dummy

+0

Könnten Sie versuchen, Codierung oder den Hash zu entkommen? – DeborahK

1

fand ich dies:

Fragment Parameter Das Fragment Teil der URL, alles nach Ein Hash-Symbol ist eine Information, die normalerweise nur vom Client wie einem Browser verwendet wird und nicht vom Server verarbeitet wird. Daher ist es uninteressant bei der Diskussion von REST-Parametern. Der einzige interessante Artikel ist, wenn Sie das tatsächliche Hash-Zeichen als Wert (anstelle der Darstellung des Hash-Kontrollsymbols) zu einer der Optionen senden müssen. In diesem Fall müssen Sie die URL verschlüsseln.

Character Sonderzeichen codieren, sind in der URL-codiert sind, durch einen Mechanismus „Prozent-Codierung“ genannt. In diesem Mechanismus kann jedes Zeichen durch das Prozentzeichen ersetzt werden, gefolgt von einem zweistelligen hexadezimalen Wert des codierten Zeichens. Wenn Sonderzeichen (wie das Hash-Zeichen) als aktuelle Daten gesendet werden müssen, müssen sie codiert werden. Alle anderen Zeichen können optional codiert sein.

hier: https://www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html

+0

Leider konvertiert die encodeURI() die # nicht in ihre Prozentzeichenfolge (% 23). Wenn ich dies manuell mache, kann der Server (.Net Web API) es nicht erkennen und macht sich Sorgen. – Difinity