You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 12, 2024. It is now read-only.
Repository navigation
This repository was archived by the owner on Apr 12, 2024. It is now read-only.
encodeUriSegment in resource encodes params, should be optional #1388
When having a $resource and sending a param to be used in the url, it would be nice if there was an option not to encode it. OOB it encodes (in this case the "path") param before it's match agains the url. For example
// In SomeResourceName factory:$resouce('/:path',{path: 'default.json'}, ...)// Useing SomeResourceNameSomeResourceName.get({path: 'game/mygame.json'})
This will result in a call to url "/game%2Fmygame.json" instead of "/game/mygame.json".
There's a quick-fix-workaround:
// In angular-resource.js and method encodeUriSegmentfunctionencodeUriSegment(val){returnencodeUriQuery(val,true).replace(/%26/gi,'&').replace(/%3D/gi,'=').replace(/%2B/gi,'+').replace(/%2F/gi,'/');// <--- Add this line}
I have no idea what will break, but as of know it works for me. One could also hijack the actions argument in ResourceFactory and pass a skip encode flag to the Route constructor's defaults argument to tell it to skip the encoding.
+1 to this. Provides greater flexibility. In our use case, we are using spring data rest for the backend and search methods are path params that we need to map to actions, ideally in the same resource object as for the basic CRUD ops.
The fragment identifier component of a URI allows indirect
identification of a secondary resource by reference to a primary
resource and additional identifying information. The identified
secondary resource may be some portion or subset of the primary
resource, some view on representations of the primary resource, or
some other resource defined or described by those representations. A
fragment identifier component is indicated by the presence of a
number sign ("#") character and terminated by the end of the URI.
fragment = *( pchar / "/" / "?" )
...
The characters slash ("/") and question mark ("?") are allowed to
represent data within the fragment identifier. Beware that some
older, erroneous implementations may not handle this data correctly
when it is used as the base URI for relative references (Section
5.1).
Activity
fredrikbonander commentedon Sep 19, 2012
Created a gist with the changes for hijacking :) https://gist.github.com/3749345
manuelsantillan commentedon Oct 29, 2012
+1 to this. Provides greater flexibility. In our use case, we are using spring data rest for the backend and search methods are path params that we need to map to actions, ideally in the same resource object as for the basic CRUD ops.
georgiosd commentedon Nov 22, 2012
+1. Our ids contain slashes (we use RavenDB) and it would be a clean solution if it wasn't encoded
saden1 commentedon Apr 1, 2013
Making it optional is fine but please insure that it's enabled by default.
It is ill advised to not encode URIs. Not doing so might seem "clean" now but I assure you it will bite you in the ass in this life or the next.
toddb commentedon Apr 26, 2013
If I read http://www.ietf.org/rfc/rfc3986.txt correctly, we should be allowed the unencoded slash for the fragment.
Use case:
$location.hash('/secondary-resource')ProLoser commentedon May 10, 2013
I'm just curious, is it possible to avoid this issue by double-encoding your params?
toddb commentedon May 11, 2013
Sorry, it then makes it even worse. Just to confirm I tried out a number of opens even though it felt futile!
'/', '%252F' --> %25252F
Also,
/ %2f --> %252F
'/', '//' --> %2F%2F
Thanks for the thought. Request still stands.
sephie commentedon Jul 10, 2013
Ran into this today. +1
I might not like it, but our id's contain slashes as well. This needs to be optional.
stevermeister commentedon Jul 10, 2013
+1
chelexey commentedon Sep 28, 2013
+1
mrzepinski commentedon Nov 21, 2013
+1
e0ipso commentedon Dec 3, 2013
+1
jchonde commentedon Jan 28, 2014
+1
39 remaining items
pavolloffay commentedon Aug 21, 2015
+1
patou commentedon Sep 6, 2015
You can use the same syntaxe like in the ui-router lib :
http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.type:UrlMatcher
jiananshi commentedon Oct 15, 2015
+1
it also happens in location
Fix a files route to fit web server data
DaAwesomeP commentedon Dec 20, 2015
👍
thesameson commentedon Dec 24, 2015
+1
jiananshi commentedon Dec 24, 2015
I'm current doing a decode in order to send my original url to backend
tekstrand commentedon Jan 22, 2016
+1
kishorekumaru commentedon Mar 4, 2016
+1
zapolnoch commentedon Jul 5, 2016
#5560
hadirsa commentedon Aug 12, 2016
+1
ibrahim89 commentedon Oct 21, 2016
i'm getting this error in angularjs $resource service
Error: encodeUriSegment is not a function
gkalpak commentedon Oct 22, 2016
@ibrahim89, make sure you use the same version of angular and angular-resource.
skarensmoll commentedon Dec 9, 2016
@gkalpak, thank you !!
ibrahim89 commentedon Dec 10, 2016
my error is solved