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

时间:2015-06-29 11:51:36

标签: .net function odata

我正在.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文件配置或函数声明中是否缺少某些内容?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

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