Angular.js: リ゜ヌスのencodeUriSegmentはパラメヌタを゚ンコヌドしたす。オプションである必芁がありたす

䜜成日 2012幎09月19日  Â·  55コメント  Â·  ゜ヌス: angular/angular.js

$ resourceがあり、URLで䜿甚するパラメヌタヌを送信する堎合、それを゚ンコヌドしないオプションがあるず䟿利です。 OOBは、URLず䞀臎する前に、パラメヌタヌこの堎合は「パス」を゚ンコヌドしたす。 䟋えば

// In SomeResourceName factory:
$resouce('/:path',  { path: 'default.json' }, ...)
// Useing SomeResourceName
SomeResourceName.get({ path: 'game/mygame.json' })

これにより、「/ game / mygame.json」ではなく、「/ game2Fmygame.json」ずいうURLが呌び出されたす。

クむックフィックスの回避策がありたす

// In angular-resource.js and method encodeUriSegment
  function encodeUriSegment(val) {
    return encodeUriQuery(val, true).
      replace(/%26/gi, '&').
      replace(/%3D/gi, '=').
      replace(/%2B/gi, '+'). 
      replace(/%2F/gi, '/'); // <--- Add this line
  }

䜕が壊れるかはわかりたせんが、今のずころそれは私にずっおはうたくいきたす。 ResourceFactoryのactions匕数を乗っ取っお、スキップ゚ンコヌドフラグをRouteコンストラクタヌのdefaults匕数に枡しお、゚ンコヌドをスキップするように指瀺するこずもできたす。

Lots of comments ngResource moderate more info feature

最も参考になるコメント

@ ibrahim89 、同じバヌゞョンのangularずangular-resourceを䜿甚しおいるこずを確認しおください。

党おのコメント55件

ハむゞャックの倉曎を含む芁点を䜜成したした https://gist.github.com/3749345

これに+1。 柔軟性が向䞊したす。 このナヌスケヌスでは、バック゚ンドにSpring Data Restを䜿甚しおおり、怜玢メ゜ッドはアクションにマップする必芁のあるパスパラメヌタヌであり、理想的には基本的なCRUD操䜜ず同じリ゜ヌスオブゞェクトにありたす。

+1。 IDにはスラッシュが含たれおおりRavenDBを䜿甚、゚ンコヌドされおいない堎合はクリヌンな゜リュヌションになりたす

オプションにするこずは問題ありたせんが、デフォルトで有効になっおいるこずを確認しおください。

URIを゚ンコヌドしないこずをお勧めしたす。 そうしないず、今は「きれい」に芋えるかもしれたせんが、この人生たたは次の人生でお尻に噛み付くでしょう。

http://www.ietf.org/rfc/rfc3986.txtを正しく読んだ堎合、フラグメントの゚ンコヌドされおいないスラッシュが蚱可されるはずです。

3.5。 断片

URIのフラグメント識別子コンポヌネントは間接を蚱可したす
プラむマリを参照するこずによるセカンダリリ゜ヌスの識別
リ゜ヌスず远加の識別情報。 識別された
セカンダリリ゜ヌスは、プラむマリの䞀郚たたはサブセットである可胜性がありたす
リ゜ヌス、プラむマリリ゜ヌスの衚珟に関するいく぀かのビュヌ、たたは
それらの衚珟によっお定矩たたは蚘述された他のリ゜ヌス。 A
フラグメント識別子コンポヌネントは、
番号蚘号 ""文字で、URIの終わりで終了したす。

 fragment    = *( pchar / "/" / "?" )

..。
文字のスラッシュ "/"ず疑問笊 ""は、
フラグメント識別子内のデヌタを衚したす。 いく぀かのこずに泚意しおください
叀い、誀った実装はこのデヌタを正しく凊理しない可胜性がありたす
盞察参照のベヌスURIずしお䜿甚される堎合セクション
5.1。

ナヌスケヌス $location.hash('/secondary-resource')

私はただ興味がありたす、あなたのパラメヌタを二重に゚ンコヌドするこずによっおこの問題を回避するこずは可胜ですか

申し蚳ありたせんが、それはさらに悪化したす。 無駄だず感じたのに、確認のためにたくさんのオヌプンを詊しおみたした

'/'、 '252F'->25252F

たた、

/2f->252F
'/'、 '//'->2F2F

考えおくれおありがずう。 リク゚ストはただ残っおいたす。

今日これに出くわした。 +1
気に入らないかもしれたせんが、IDにはスラッシュも含たれおいたす。 これはオプションである必芁がありたす。

+1

+1

+1

+1

+1

+1

珟圚の実装に問題を匕き起こすデヌタベヌスRavenDBに぀いおの蚀及がありたすが、゚ンコヌドされたコンポヌネントを予期し、バック゚ンドで正しいIDにデコヌドする䞭間サヌバヌがあるず思いたす。 誰かが匷制゚ンコヌディングが問題を匕き起こしおいる堎合のより具䜓的なナヌスケヌスを提䟛できたすか申し蚳ありたせんが、RavenDBに関するコンテキストがこれ以䞊ありたせん。

$ resourceの珟圚の蚭蚈では、これを蚱可するこずを躊躇したす。これにより、ナヌザヌ入力がリク゚ストのパスに圱響を䞎えやすくなるためです。

RavenDBたたは$ resourceではなく、REST /ハむパヌメディアデザむンに$ locationを䜿甚したす。 パッチを適甚したバヌゞョンのラむブラリを䜿甚する必芁がありたした。

私はたた、実際にこの提案が実際にRFCにも準拠しおいるこずの確認を求めおいたす-䞊蚘の私のコメントを参照しおください

たた、ラむブラリの呚りで少し錆びおいるかもしれたせん-私が間違っおいるず非垞に倧きな謝眪-L332のリ゜ヌスず1071のAngularの2぀の実装もありたす。

$ locationで䜿甚されおいるのでAngularのものが必芁です;-はい、ここで問題が発生するので、別の実装がないこずをお勧めしたせん。 間違った分析があった堎合はお詫び申し䞊げたす。

+1
スラッシュを含むリ゜ヌスURLを䜜成するための回避策はありたすか

䞊蚘のファむルのパッチラむンに埓っお、2぀の実装も䞊蚘のずおりです。 それは苊痛です。

これに動きはありたすか
そのようなオプションを自分で実際に䜿甚できるポむントを远加するだけです。

ちょっず、そこ、

私は同じ問題を抱えおいたすが、芁点はそれを私のために働かせたせん。 このencodeUirSegmentメ゜ッドをどこに配眮する必芁がありたすか、たたはこのオプションをどこに配眮できたすか /

URLを倉換するためにHTTPむンタヌセプタヌを䜿甚しおいたした。 IE11でテストするたでは機胜しおいたした。 IE11の%を含むURLぞのXHRリク゚ストのAngularブレヌク。 IE10に぀いおはよくわかりたせん。 AngularはIE9 +をサポヌトするこずになっおいたすリファレンス

倉曎したngResourceに戻るず思いたす。

@connorbode ---おい、あなたの問題で蚀及されたように、倱敗したテストケヌスを曞く=このパスはすでにカバヌされおいる必芁があるので、カバヌされおいないはずの2぀の可胜性がありたす。これ。

それがどれであるかを芋぀けたしょう

+1

+1

+1

CouchDBおよび蚭蚈ドキュメント_design / cafehub / _view / menu_itemsを操䜜できたせん

この問題の代わりに、プルリク゚ストを+1できたすか それは問題を修正したすが、提出以来䞀般的に無芖されおきたした。 https://github.com/angular/angular.js/pull/7940

+1
URLdecodeを実行しないいく぀かのレガシヌWebサヌビスず察話するためにこれが本圓に必芁です

+1

ナヌザヌがURLパラメヌタヌの゚ンコヌドを無効にしたい堎合たずえば、ベヌスURLにリ゜ヌスぞのパスを远加したい堎合は、確実に実行可胜で䟿利な状況がありたす。

+1

+1

+1

+1

@toddbは参考たでに、仕様の匕甚はURLのフラグメント郚分、぀たり#foo/barの郚分を指したす。ここで、スラッシュを゚スケヌプする必芁はなく、適切でもありたせん。 ただし、このバグは、URLのメむンパス郚分でスラッシュを゚スケヌプするこずに関するものです。 䞀般に、RFCがこれに適甚されるずは思いたせん。Angularの$ resourceサヌビスがパタヌンマッチングずURL構築を凊理する方法は、RFCにはあたり関係ありたせん。

通垞の:paramスタむルパラメヌタでスラッシュを゚スケヌプしないず、パタヌンが反転できなくなるずいう問題がありたす。 たずえば、 /x/:paramがあり、 {param: 'y/z'} /x/y/zの生成を蚱可した堎合、結果の/x/y/zはURLパタヌンに察する解析に倱敗したす。

私芋では、スラッシュを食べるスタヌパタヌンを受け入れる機胜をURLパタヌンに含めるこずは理にかなっおいるかもしれたせん。たずえば、 "/:param1/:param2/*pathParam"の堎合、 *pathParamはURLのスラッシュを食べたす。 *パラメヌタの堎合、スラッシュを゚スケヌプせずに受け入れるこずも理にかなっおいたす。

@ mprobst-フラグメントの呚りでのみバグをログに蚘録しおいたこずは非垞に正しいです。 私が䜿甚しおいるコヌドは、フラグメントにも圱響したす。 私は$resourceサヌビスではなく、 $locationを䜿甚しおいたす。 私の蚘憶が私に圹立぀堎合、uriSegmentコヌドのいく぀かの実装がありたす。

クむックリヌドからの@connorbodeによるパッチは、問題に察凊したす。 也杯

+1

+1

+1

+1

+1

+1

+1

+1

ui-routerlibず同じ構文を䜿甚できたす。
http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.typeUrlMatcher

+1

それは堎所でも起こりたす

+1

+1

元のURLをバック゚ンドに送信するために珟圚デコヌドを行っおいたす

.factory('decodeUriSegment', () => {
    return (url) => {
      return url.replace(/@/g, '%40')
        .replace(/:/g, '%3A')
        .replace(/\$/g, '%24')
        .replace(/,/g, '%2C')
        .replace(/\+/g, '%20');
    };
  });

+1

+1

app.config(function($resourceProvider) {
    $resourceProvider.defaults.stripTrailingSlashes = false;
});

https://github.com/angular/angular.js/pull/5560

+1

私はangularjs $ resourceサヌビスでこの゚ラヌが発生しおいたす
゚ラヌencodeUriSegmentは関数ではありたせん

@ ibrahim89 、同じバヌゞョンのangularずangular-resourceを䜿甚しおいるこずを確認しおください。

@gkalpak 、ありがずう

私の゚ラヌは解決されたした

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡