对于OData和ASP.NET Core来说,URL太长。

问题描述 投票:0回答:1

我使用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)模式?

c# asp.net-core odata iis-express kestrel
1个回答
0
投票

问题不在于URL本身的长度。相反,它与OData函数有关,它导致了一个非常长的URL。. 在Windows上,这似乎被限制为260个字符。所以在我的例子中,URL段是 MyFunction(ids='a,b,c,d,e,f') 实在是太长了。

我发现有两种不同的方法。

  1. 改变Windows注册表的设置(见此). 我没有测试它,但其他帖子中的评论看起来很有希望。
  2. 使用 参数别名.

我选择了第二种方法,所以现在我的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。

© www.soinside.com 2019 - 2024. All rights reserved.