如何在 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
我正在 .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