Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将url参数传递到路由?_C#_Nancy - Fatal编程技术网

C# 如何将url参数传递到路由?

C# 如何将url参数传递到路由?,c#,nancy,C#,Nancy,我将路由添加到项目中。所有操作都正确,但若我将普通url作为第一个参数发送,它将无法正常工作 Get["/{url}/{digit}" 如果我将此参数发送到服务器,则所有参数都能正常工作 localhost:8888/google.com/2 但是如果我用http://www它不起作用 localhost:8888/https://www.google.com/2 如何正确地将url参数传递到路由?我认为这是因为我发送了输入参数 如果确实需要使用GET而不是POST,请尝试HttpUtil

我将路由添加到项目中。所有操作都正确,但若我将普通url作为第一个参数发送,它将无法正常工作

Get["/{url}/{digit}"
如果我将此参数发送到服务器,则所有参数都能正常工作

localhost:8888/google.com/2
但是如果我用
http://www
它不起作用

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

如何正确地将url参数传递到路由?我认为这是因为我发送了输入参数

如果确实需要使用GET而不是POST,请尝试
HttpUtility.UrlEncode(“https://google.com/2“
对url进行编码。

您必须对作为参数发送的url进行编码:
使用:

然后,您的url将如下所示,并且不会出现任何错误:

https%3A%2F%2Fwww.google.com%2F2

发送请求:

localhost:8888/https%3A%2F%2Fwww.google.com%2F2

或者你可以使用

HttpUtility.UrlEncode();

方法。有关更多信息,请查看。

因为您坚持只更改后端,所以可以尝试使用正则表达式捕获您的路由

Get["^(?<url>.*<digit>[0-9]+)$"]
Get[“^(?.[0-9]+)$”]
这应该匹配任何以至少一个数字结尾的url,并将所有内容放在url前面,如下所示:

Get["^(?<url>.*<digit>[0-9]+)$"] = parameters =>
    {
        var url = parameters.url;
        var digit = parameters.digit;
    };
Get[“^(?.*[0-9]+)$”]=parameters=>
{
var url=parameters.url;
var数字=parameters.digit;
};

我目前无法验证它是否能像您希望的那样工作,并且为了确保您可以自己调整它,请确保研究如何编写正则表达式

如何更改路由?您是否尝试过类似于
“/{url}/{digit}/{digit2}”
?我想更改路由
Get["^(?<url>.*<digit>[0-9]+)$"] = parameters =>
    {
        var url = parameters.url;
        var digit = parameters.digit;
    };