我使用ASP.NET Core Web API与OData( )建立了一个OData服务。微软.AspNetCore.OData).
我的unbound函数有一个参数,接受一个可能很长的字符串。http://localhost:5000/odata/MyFunction(ids='a,b,c,d,e,f')
.
如果字符串的长度是 ids
不会变得太大。然而,当传递一个过长的字符串时,请求会以这样的方式失败。HTTP 400
.
我已经试过了 - 不幸的是,它没有工作。
我必须如何配置应用程序,以便在生产中同时支持长请求(Kestrel)和dev(IIS Express)模式?
问题不在于URL本身的长度。相反,它与OData函数有关,它导致了一个非常长的URL。段. 在Windows上,这似乎被限制为260个字符。所以在我的例子中,URL段是 MyFunction(ids='a,b,c,d,e,f')
实在是太长了。
我发现有两种不同的方法。
我选择了第二种方法,所以现在我的URL看起来像这样。http://localhost:5000/odata/MyFunction(ids=@p1)?@p1='a,b,c,d,e,f'
. 最棒的是,我不需要在我的OData配置中改变任何东西--它就能正常工作。
经过一番测试,我达到了查询字符串的最大长度。为了解决这个问题,我引入了一个 web.config
文件,内容如下。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxUrl="20100" maxQueryString="20000" />
</requestFiltering>
</security>
</system.webServer>
<system.web>
<httpRuntime maxUrlLength="20100" maxQueryStringLength="20000" />
</system.web>
</configuration>
第二种方法的缺点是Power BI Desktop似乎不容易支持。我无法在Power BI Desktop中添加参数别名。简单的用户界面 当浏览OData服务时,会出现 "无 "字样。但是,在创建带有长查询字符串的Power BI Parameter时,我可以自己用Power BI Parameter als Parameter Alias组成OData URL。