我和我的团队正在我们的MVC5项目中实现数据层。我们在Web API /后端代码上使用OData。在我们开始对查询字符串施加字符限制之前,一切都很有效。
例如:
这有效:
builder.Function("GetSalesTaxRate")
.Returns<double>()
.CollectionParameter<string>("IdentityField");
[HttpGet]
[ODataRoute("GetSalesTaxRate(IdentityField={ids})")]
public IHttpActionResult GetSalesTaxRate([FromODataUri] IEnumerable <string> ids)
{
double rate = 5.6; // Use a fake number for the sample.
return Ok(rate);
}
http://localhost:123456/api/GetSalesTaxRate(IdentityField=['11-3011','11-2011'])
这不起作用:
http://localhost:123456/api/GetSalesTaxRate(IdentityField=['11-3011,11-2011,11-9041,11-1011,11-3111,11-3021,11-9021,11-9032,11-9031,11-9039,11-9033,11-9161,11-9013,11-3031,11-9051,11-9061,11-9071,11-1021,11-3121'])
我收到的错误是:
错误的请求。 HTTP错误400.请求URL无效。
无法加载资源:服务器响应状态为400 (错误请求)
我试图通过OData使用客户端过滤(使用$ filter机制),以及服务器端自定义数据控制器过滤(通过将[FromODataUri] IEnumerable&lt; string&gt;作为参数传递给方法) 。两者都有限制我的情况。
我从stackoverflow回答中尝试了[UrlSegmentMaxLength]的注册表设置但未成功: Bad Request - Invalid URL web api
我没有成功尝试过这些web.config设置:
<system.web><httpRuntime targetFramework="4.6.1" requestValidationMode="4.0" maxQueryStringLength="2097151" maxUrlLength="10999" relaxedUrlToFileSystemMapping="true" enable="true" />.....
<security><requestFiltering><requestLimits maxQueryString="2097151" maxUrl="10999"/>....
我想在部署到我们网络上的Web服务器之前,让它在我的本地盒子上工作。我怎样才能让它在本地工作?如何让这个端点接受许多&#34; IdentityField&#34;我需要传递的价值观?我试图将其作为IEnumerable&lt;传递给它字符串&gt;以及一个字符串。我对两者都有限制。
我需要以不同方式解决这个问题吗?我已阅读使用POST方法,但我不确定如何做到这一点。我需要能够传递其中的800个&#34; IdentityField&#34;字符串到此端点(大约10,000个字符)。有什么建议或想法吗?谢谢!
答案 0 :(得分:1)
尝试更改最大请求长度。这是iis的限制
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>