我正在.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文件配置或函数声明中是否缺少某些内容?
提前致谢!!
答案 0 :(得分:1)
您可能无法使用正斜杠传递URL中的参数,因为路由似乎即使在编码时也会按字面读取它们。要避免此问题,您可以将所有参数作为请求内容中的对象传递。 See this on the MS OData blog