C# 如何使用'/';在字符串参数中
我有一个C#WebApi 4项目,我试图在其中包含一个字符为“/”的字符串参数。例如,我在参数中传递路径: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(
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的解析问题,它在“/”上进行解析,并希望它们始终是路由值而不是字符串值。