ASP.Net Web API 返回"400 (Bad Request)" .参数太多?



场景

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

一切都很好,直到我尝试选择所有可能的标签(有点像API上的压力测试)。事实证明,当我这样做的时候,我会得到400 (Bad Request)的响应。如果删除一些参数,它就会重新工作。URL的长度在中断之前大约是270个字符,但它似乎有所不同,我不确定错误是由URL的长度引起的,还是由参数太多引起的。

问题

在构建MVC 4 Web API时,Web.config中是否缺少指定最大URL长度的XML标记?或者可能是参数的最大数量?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错误(这就是谷歌控制台为我显示的内容)

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) 

已解决

我使用Imingle在这里找到的答案解决了这个问题ASP.NET MVC,Url路由:最大路径(Url)长度。它涉及将<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />添加到位于<system.web>打开标记正下方的web.config中。


至少我相信这就是诀窍所在。我的具体步骤如下:

  1. 在密钥HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTPParameters中添加了一个名为UrlSegmentMaxLeng的DWORD注册表项。我设置的值等于1000(相当于4096,但我对此了解不多)测试失败
  2. 已重新启动计算机。--测试失败
  3. <httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />添加到位于<system.web>打开标记正下方的web.config中。--测试通过

我希望它能有所帮助。

最新更新