我正在创建一个Android应用程序,我使用web api从服务器发送和接收json数据。我的一个查询在路由属性中包含最多30个参数,如下所示。结果我得到一个尝试除以零错误。错误行是GlobalConfiguration.Configure(AddressOf Register)我在web.condfig文件中增加了maxURLlength,maxQueryStringLength和maxRequestLength,但没有任何效果。
问题:导致此问题的原因是什么?具有特定路由属性的每个out操作都在控制器中工作。
试图除以零。描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.DivideByZeroException:尝试除以零。
<Route("api/dtl/GetResults/{1}/{30})>
所以我找到了我正在寻找的答案。不允许长路由,这就是为什么我得到Can not除零错误。我做错了。我需要做的就是以正确的形式正确配置我的路线
<Route("api/DTL/ActionName")>
代替
<Route("api/dtl/ActionName/{}/{}/{}/{}/{}/{}/{}/{}/{}/{}/{}/{}/{Zip}")>
然后我可以通过这样的URL来调用此操作
http://localhost:17895/api/dtl/PostCreateMember?Username=jason&Gender=Male等等
因此,只要我已定义模型接受它,url就可以只要它想要。您可以在https://blog.scottlogic.com/2016/01/20/restful-api-with-aspnet50.html了解更多信息
在POST方法中使用URL参数通常不会出现问题,但是当您有太多可能会产生问题时,就像您已经看到的那样。
更好的想法是在您的请求正文中传递您需要的所有内容。您可以创建一个包含所需内容的对象,将其放入请求正文中,在API中使用模型表示它,然后您的POST请求变得更加容易和简单。
还有一件事,URL参数需要进行URL编码,因为您的数据可能包含特殊字符(如&符号),这样的内容可能会完全搞砸您的URL,并且您可能会开始看到404错误,因为您的路由不再匹配。