如何在 OData 未绑定函数字符串参数中允许特殊字符(斜杠和句点)?

How to allow special characters (slashes and periods) in OData unbound function string parameter?

我正在 .net 中的 OData v4 服务中创建未绑定函数。 函数声明如下:

WebApi 路由配置:

    modelBuilder
       .Function("MyFunction1")
       .ReturnsCollection<string>()
       .Parameter<string>("parameter1");

控制器:

[HttpGet]
[ODataRoute("MyFunction1(parameter1={value1})")]
public IHttpActionResult MyFunction1([FromODataUri] string value1)
{
    return Ok(MyFunction2(value1));
}

可以这样调用:

/myservice/MyFunction1(parameter1='abcd')

只要 parameter1 不包含正斜杠(“/”),此函数就可以正常工作。由于函数的性质,需要允许空格、句点和斜线。我能够使用 web.config 文件(处理程序部分)中的以下行将服务配置为允许空格和句点:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="/*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

最后,我需要的是以下调用不抛出错误500:

/myservice/MyFunction1(parameter1='ab/c d/efg')

web.config 文件配置或函数声明中是否缺少某些内容?

提前致谢!!

您可能无法在 URL 中使用正斜杠传递参数,因为路由似乎按字面意思读取它们,即使它们已编码。为避免此问题,您可以将所有参数作为请求内容中的对象传递。 See this on the MS OData blog