ASP.Net Web API返回“400(错误请求)”。参数太多了?

时间:2013-12-07 23:41:36

标签: asp.net json vb.net asp.net-mvc-4 asp.net-web-api

方案

我有一个ASP.NET Web API,它从我的代码隐藏中返回一个JSON对象。用于调用此API的URL提供了tag-id的分隔列表(由加号分隔)。然后,JSON对象返回附加了此标记的帖子。

在我尝试选择所有可能的标签(对API进行压力测试)之前,一切都运行良好。当我这样做时,我得到400 (Bad Request)响应。如果删除一些参数,它会再次运行。 URL长度在它中断之前大约是270个字符,但它似乎有所不同,我不确定错误是由URL的长度引起的,还是由于参数太多而引起的。

问题

构建MVC 4 Web API时,我缺少web.config中的XML标记,指定最大URL长度吗?或者可能是最大数量的参数?我缺少Global.asax文件中的某些内容吗?

关于API,它是一个MVC 4 Web API,但在Visual Studio 2010中的WebForms项目中使用。这意味着存在一些细微差别,但即使有人能指出我正确的方向,我也是我相信我能解决这个问题。在这一点上,我甚至不知道谷歌是什么:(

代码

以下是我项目中的一些代码,以防它有用......

Global.asax (“帖子”API是我遇到问题的那个。我重命名了其他人)

<%@ Application Language="VB" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.Http" %>

<script runat="server">


    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)



        RouteTable.Routes.MapHttpRoute(name:="OTHERAPI01", routeTemplate:="api/{controller}/{email}", defaults:=New With {.email = System.Web.Http.RouteParameter.Optional})
        RouteTable.Routes.MapHttpRoute(name:="OTHERAPI02", routeTemplate:="api/{controller}/{action}/{id}", defaults:=New With {.body = System.Web.Http.RouteParameter.Optional, .id = System.Web.Http.RouteParameter.Optional})
        RouteTable.Routes.MapHttpRoute(name:="OTHERAPI03", routeTemplate:="jjnotey/{controller}/{action}")
        RouteTable.Routes.MapHttpRoute(name:="Posts", routeTemplate:="postsApi/{controller}/{action}/{category}/{pageNumber}/{searchBy}/{searchValue}", _
                                       defaults:=New With {.category = "tb", .pageNumber = 1, .searchBy = System.Web.Http.RouteParameter.Optional, _
                                       .searchValue = System.Web.Http.RouteParameter.Optional})

    End Sub

</script>

API函数 (仅限名称和参数。内容不相关,因为代码执行甚至无法达到此功能。)

Public Function GetPosts_NEW(ByVal category As String, ByVal pageNumber As Integer, _
                                     Optional ByVal searchBy As String = "", Optional ByVal searchValue As String = "") As String

GET错误 (这是Google控制台为我显示的内容)

GET http://localhost:49816/myDomainName/postsApi/Posts/GetPosts/tb/1/DepartmentId/1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100+101+102+103+104 400 (Bad Request) 

1 个答案:

答案 0 :(得分:0)

解决了它

我使用Imingle在这里找到的答案ASP.NET MVC, Url Routing: Maximum Path (URL) Length解决了这个问题。它涉及将<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />添加到<system.web>开始标记正下方的web.config。


至少我相信这就是诀窍。我的确切步骤如下:

  1. 在密钥HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters中添加了名为 UrlSegmentMaxLengh 的DWORD注册表项。我设置的值等于1000(相当于4096,但我不太了解)。 - TEST FAILED
  2. 重新启动计算机。 - TEST FAILED
  3. <httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />添加到<system.web>开始标记正下方的web.config中。 - TEST PASSED

  4. 我希望它有所帮助。

相关问题