【问题标题】:ASP.Net Web API returns "400 (Bad Request)". Too many parameters?ASP.Net Web API 返回“400(错误请求)”。参数太多?
【发布时间】:2013-12-25 05:36:45
【问题描述】:

场景

我有一个 ASP.NET Web API,它从我的代码隐藏中返回一个 JSON 对象。用于调用此 API 的 URL 提供了一个分隔的标签 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 是我遇到的问题。我重命名了其他 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) 

【问题讨论】:

  • @EdSF 是的,谢谢。我尝试了其中的几个答案,其中一个成功了。阅读我的回答,了解我采取的具体步骤。

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


【解决方案1】:

解决了

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


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

  1. 在键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters 中添加了一个名为 UrlSegmentMaxLengh 的 DWORD 注册表项。我设置的值等于 1000(等于 4096,但我对此了解不多)。 -- 测试失败
  2. 重新启动计算机。 -- 测试失败
  3. &lt;system.web&gt; 开始标记正下方的web.config 中添加了&lt;httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" /&gt;。 -- 测试通过

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2015-07-17
    • 2020-11-13
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多