“点"在查询字符串参数中 - AngularJS [英] "dot" in query string parameter - AngularJS

查看:24
本文介绍了“点"在查询字符串参数中 - AngularJS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在查询字符串参数中使用点 (.) 但它不起作用.

此网址工作正常:

http://localhost:9000/search-min&maj0cf=0&majRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=com"0安培; majDOMCFMax = 100安培; majRefDomainsMin = 0&安培; majRefDomainsMax = 100安培; majRefIPsMin = 0&安培; majRefIPsMax = 100安培; majRefDomainsEDUMin = 0&安培; majRefDomainsEDUMax = 100安培; majRefDomainsGOVMin = 0&安培; majRefDomainsGOVMax = 100安培; selectedTLDs = com的

但不是这个,因为它在参数中包含一个点:

http://localhost:9000/max=0&min&majRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=co.uk"majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&majRefIPsMax=100&majRefDomainsEDUMin=0&majRefDomainsEDUMin=0&majRefDomainsEDUmax0&majRefDomains0&majVin./p>

当我尝试打开上面的 URL(带点)时,它只会打印:

无法获取/search-result?majTFMin=0&majTFMax=100&majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&10Refj0&majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&10Refj0&main&majRefj0&main&10Refj0&mainmajRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=co.uk

而且没有别的,甚至没有任何 HTML 标签(已在查看源代码中检查过)

我读过很多帖子都说.可以在没有编码的查询字符串中使用,但我不明白为什么它在这里不起作用.我认为 AngularJS 有一些问题.

我正在使用 ui-router 进行状态更改并将值传递给控制器​​.

任何帮助将不胜感激.

解决方案

如果您正在使用 connect-history-api-fallback 在您的服务器上(就像 lite-server 一样),带点的网址默认不会被重写.

connect-history-api 回退代码

if (parsedUrl.pathname.indexOf('.') !== -1) {记录器('不重写',请求方法,请求.url,'因为路径包含一个点 (.) 字符.');返回下一个();}

connect-history-api-fallback 版本 1.2.0 开始,允许带点的网址,你可以解决这个问题 使用 aa 重写规则

示例

如果您带点的 URL 是 /search-result 并且您的 Angular 应用程序位于 index.html 页面中,您可以向连接历史记录添加重写规则-像这样的 api-fallback

重写:[{来自:/^\/搜索结果/,到:'index.html'}}]

I'm trying to use dot (.) in query string parameter but its not working.

This URL is working fine:

http://localhost:9000/search-result?majTFMin=0&majTFMax=100&majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&majRefIPsMax=100&majRefDomainsEDUMin=0&majRefDomainsEDUMax=100&majRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=com

But not this one as it contains a dot in a parameter:

http://localhost:9000/search-result?majTFMin=0&majTFMax=100&majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&majRefIPsMax=100&majRefDomainsEDUMin=0&majRefDomainsEDUMax=100&majRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=co.uk

When I'm trying to open above URL (with dot), it just prints:

Cannot GET /search-result?majTFMin=0&majTFMax=100&majDOMCFMin=0&majDOMCFMax=100&majRefDomainsMin=0&majRefDomainsMax=100&majRefIPsMin=0&majRefIPsMax=100&majRefDomainsEDUMin=0&majRefDomainsEDUMax=100&majRefDomainsGOVMin=0&majRefDomainsGOVMax=100&selectedTLDs=co.uk

And nothing else, not even any HTML tags(has checked that in view source)

I have read lots of posts which says that . can be used in query string without encoding, but I don't understand why its not working here. I think it has some issue with AngularJS.

I'm using ui-router for state change and passed value to controller.

Any help would be appreciated.

解决方案

If you are using connect-history-api-fallback on your server (like lite-server does), the URLs with a dot are not rewritten by default.

connect-history-api-fallback code

if (parsedUrl.pathname.indexOf('.') !== -1) {
  logger(
    'Not rewriting',
    req.method,
    req.url,
    'because the path includes a dot (.) character.'
  );
  return next();
}

Starting with connect-history-api-fallback version 1.2.0 the URLs with dots are allowed and you can solve this problem by using a a rewrite roule

Example

If your URL with dot is /search-result and you angular app lives in the index.html page you can add a rewrite rule to the connect-history-api-fallback like this

rewrites: [
  {
    from: /^\/search-result/,
    to: 'index.html'
    }
  }
]

这篇关于“点"在查询字符串参数中 - AngularJS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆