如何通过url params路由?

时间:2016-09-30 07:20:41

标签: c# nancy

我添加路线到项目。所有工作正确,但如果我发送普通网址作为第一个参数它不能正常工作。

Get["/{url}/{digit}"

如果我将此params发送到服务器 - 所有工作正常。

localhost:8888/google.com/2

但是如果我发送http://www的param,那就不行了。

localhost:8888/https://www.google.com/2

如何正确传递url param路由?我认为是因为Nancy认为我发送3输入参数。

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;
    };

我目前无法验证这是否符合您的要求,并确保您可以自行调整,请务必查看如何编写正则表达式