Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 如何使用'/';在字符串参数中_C#_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

C# 如何使用'/';在字符串参数中

C# 如何使用'/';在字符串参数中,c#,asp.net-mvc,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api Routing,我有一个C#WebApi 4项目,我试图在其中包含一个字符为“/”的字符串参数。例如,我在参数中传递路径: http://localhost/api/MyController/mypath/testing 我希望MyController中Get方法中的id参数填充“mypath/testing”。然而,看起来这个路由应该是两个参数,并且找不到要去哪里,所以它返回错误 我想我需要更改默认路线。当前在WebApiConfig类中,它被设置为: config.Routes.MapHttpRoute(

我有一个C#WebApi 4项目,我试图在其中包含一个字符为“/”的字符串参数。例如,我在参数中传递路径:

http://localhost/api/MyController/mypath/testing
我希望MyController中Get方法中的id参数填充“mypath/testing”。然而,看起来这个路由应该是两个参数,并且找不到要去哪里,所以它返回错误

我想我需要更改默认路线。当前在WebApiConfig类中,它被设置为:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}/{id}",
     defaults: new { id = RouteParameter.Optional }
);
但我不确定该使用哪种模式。有人有什么建议吗

编辑:如果我将URL更改为,并将路由修改为:

config.Routes.MapHttpRoute(
     name: "DefaultApi",
     routeTemplate: "api/{controller}?{id}",
     defaults: new { id = RouteParameter.Optional }
);

那么这个参数就可以通过了。但是,我要求不要更改URL模式,也不要更改URL编码。

URL中的“/”是保留的,如果要将其用作参数,则应该对其进行编码。您需要这样编码:
%2F


您可以在此检查所有需要编码的符号

在传入之前对其进行编码?不要使用
/
作为分隔符,因为它在URL中已经有了用途?RFC告诉您URL中的有效内容。哦,如果你发现了这个问题(例如,如果你登录某人并使用
returnUrl
返回到你当前的链接,那么在.NET中双编码URL很有趣:我能想到的唯一方法是,
ControllerName/{*id}
。但它也有它的局限性。@Mathew,这很好用!如果你加一个答案,我会把它标为正确。另外,我很好奇——你提到的一些限制是什么?是一个没有编码的有效路径-例如,如果我有一个带文件夹的不同服务器,而不是使用MVC。这实际上更像是MVC的解析问题,它在“/”上进行解析,并希望它们始终是路由值而不是字符串值。