.NET中OData V4无绑定函数如何支持含特殊字符的字符串参数?
解决.NET OData V4无绑定函数中的正斜杠转义问题
在OData V4的URI规范中,正斜杠(/)属于路径分隔符,直接作为字符串参数传递会导致路由解析错误,以下是几种可行的解决方式:
1. 使用URL编码转义
将参数中的正斜杠替换为对应的URL编码%2F,修改后的请求URI示例:
/Test/Default.MyFunction1(value1='HV%2FPD%20Testing')
控制器中的[FromODataUri]属性会自动完成解码,无需手动处理,方法内可直接获取到包含/的原始参数值。
2. 配置允许未转义斜杠(谨慎使用)
若希望避免每次手动编码,可修改WebApi的路由配置,允许未转义的斜杠存在于路由中:
// 在WebApiConfig.cs的Register方法中添加配置 config.Routes.MapODataServiceRoute("ODataRoute", null, modelBuilder.GetEdmModel(), new DefaultODataPathHandler() { UrlKeyDelimiter = ODataUrlKeyDelimiter.Slash }); // 开启宽松的URL到文件系统映射,允许未转义斜杠 config.RelaxedUrlToFileSystemMapping = true;
⚠️ 注意:这种方式存在安全风险,可能被利用进行路径遍历攻击,仅在可信环境中使用。
内容的提问来源于stack exchange,提问作者Zoyeb Shaikh
相关产品推荐
相关产品推荐

