我添加路线到项目。所有工作正确,但如果我发送普通网址作为第一个参数它不能正常工作。
Get["/{url}/{digit}"
如果我将此params发送到服务器 - 所有工作正常。
localhost:8888/google.com/2
但是如果我发送http://www
的param,那就不行了。
localhost:8888/https://www.google.com/2
如何正确传递url param路由?我认为是因为Nancy
认为我发送3
输入参数。
答案 0 :(得分:1)
如果您确实需要使用GET而非POST,请尝试HttpUtility.UrlEncode("https://google.com/2")
对您的网址进行urlencode。
答案 1 :(得分:1)
您必须对您的网址进行编码,该网址以参数形式发送:
使用:
var encodedString = Uri.EscapeDataString("https://www.google.com/2");
那么您的网址将如下所示,并且不会出现任何错误:
HTTPS%3A%2F%2Fwww.google.com%2F2
发送请求:
本地主机:8888 / HTTPS%3A%2F%2Fwww.google.com%2F2
或者你可以使用
HttpUtility.UrlEncode();
方法。有关详细信息,请查看this。
答案 2 :(得分:0)
由于您坚持只更改后端,您可以尝试使用正则表达式捕获路线
Get["^(?<url>.*<digit>[0-9]+)$"]
这应匹配以至少一个数字结尾的任何网址,并将所有内容放在网址之前,如下所示:
Get["^(?<url>.*<digit>[0-9]+)$"] = parameters =>
{
var url = parameters.url;
var digit = parameters.digit;
};
我目前无法验证这是否符合您的要求,并确保您可以自行调整,请务必查看如何编写正则表达式