调用带有大URL列表的asp.net MVC 3控制器时出现404错误

时间:2012-09-24 11:38:47

标签: asp.net asp.net-mvc asp.net-mvc-3 iis

我有一个动作,我要把它放在GET请求中。

网址是实时构建的,如下所示:

  

https://my-domain.com/MyController/MyAction?MyParameter=8259%2C8318%2C8201%2C8188%2C7155%2C6894%2C8221%2C8187%2C7030%2C8214%2C7489%2C8145%2C8223%2C8208%2C8273%2C8257%2C8292%2C6931%2C7072%2C7007%2C8195%2C8235%2C7493%2C7525%2C7492%2C8262%2C7491%2C7013%2C8157%2C7180%2C7181%2C7182%2C7183%2C7421%2C7422%2C7500%2C7501%2C8238%2C8239%2C8240%2C8241%2C7710%2C7711%2C7712%2C7713%2C8068%2C8432%2C7358%2C7008%2C8135%2C8307%2C8163%2C8164%2C8132%2C8182%2C8183%2C8081%2C8083%2C8109%2C8110%2C7681%2C7682%2C7683%2C7593%2C7594%2C7595%2C7546%2C7547%2C7548%2C7577%2C7578%2C7581%2C8300%2C8301%2C8302%2C8282%2C8283%2C8284%2C8311%2C8312%2C8313%2C8217%2C8218%2C8244%2C8245%2C8479%2C8482%2C8398%2C8399%2C8400%2C8401%2C8404%2C8407%2C8392%2C8394%2C6959%2C6960%2C6961%2C7041%2C7042%2C7043%2C8227%2C8228%2C8229%2C7638%2C7708%2C7118%2C8288%2C6897%2C6898%2C6899%2C6900%2C6901%2C6902%2C6842%2C6843%2C6844%2C6845%2C6846%2C6847%2C7361%2C7362%2C7363%2C7364%2C7365%2C7366%2C8165%2C8166%2C8167%2C8168%2C8169%2C8170%2C8247%2C8248%2C8249%2C8250%2C8251%2C8252%2C8099%2C8100%2C6903%2C6904%2C6905%2C6906%2C6907%2C6908%2C7704%2C8291%2C8253%2C7709%2C8277%2C7372%2C7282%2C7552%2C8205%2C7341%2C8264%2C7384%2C7701%2C7432%2C7625%2C7169%2C6912%2C8095%2C7481%2C8452%2C7062%2C7664%2C8088%2C8209%2C8278%2C6986%2C6978%2C7128%2C7440%2C6987%2C8224%2C8225%2C8178%2C8179%2C6889%2C6890%2C8191%2C8093%2C8230%2C7317%2C6895%2C8211%2C8226%2C8285%2C7266%2C7321%2C7445%2C7672%2C7453%2C7476%2C7533%2C6967%2C8054%2C7377%2C7188%2C8323%2C8105%2C7276%2C8202%2C8072%2C7689%2C8434%2C7075%2C7257%2C7379%2C6864%2C7570%2C8146%2C8147%2C8148%2C8149%2C7018%2C7019%2C7020%2C7021%2C8031%2C7044%2C7278%2C7486%2C8409%2C7707%2C8438%2C7378%2C7265%2C7176%2C7199%2C7706%2C7632%2C6998%2C7584%2C8171%2C7399%2C7125%2C6836%2C7535%2C7528%2C6968%2C7327%2C8319%2C8098%2C7543%2C6852%2C7103%2C6882%2C8426%2C8114%2C6957%2C6952%2C7527%2C6956%2C6953%2C8196%2C6989%2C7246%2C8272%2C8320%2C8324%2C6979%2C8315%2C8293%2C8294%2C8322%2C8204%2C7203%2C7326%2C7355%2C7087%2C7009%2C7498%2C7700%2C8113%2C8274%2C8325%2C8321%2C8116%2C7211%2C7252%2C7332%2C7023%2C7074%2C6977%2C7603%2C8096%2C7063%2C7014%2C7416%2C8190%2C8310%2C7032%2C7129%2C7136%2C7131%2C7187%2C7170%2C7159%2C7532%2C7651%2C7262%2C7670%2C7402%2C7403%2C7245%2C7235%2C7601%2C7316%2C7545%2C7343%2C7376%2C7665%2C7688%2C7374%2C7375%2C8041%2C7404%2C7409%2C7419%2C8422%2C7461%2C7438%2C7443%2C7487%2C7464%2C7515%2C7514%2C7512%2C7523%2C7598%2C8176%2C7544%2C7620%2C7652%2C7690%2C8330%2C8335%2C8418%2C8417%2C8421%2C8442%2C8458%2C8492%2C8457%2C8474%2C8483

我收到404错误。

如果我用原来的%2C替换,我遇到了同样的问题,只需要更多的参数。

如果我用较少的参数发出相同的请求,它就可以了。

我已经有了这个:

<system.web>
    <httpRuntime maxUrlLength="2097151" maxQueryStringLength="2097151" relaxedUrlToFileSystemMapping="true"/>
</system.web>

因为之前我告诉过我,我的maxQueryStringLength设置得太大了。

2 个答案:

答案 0 :(得分:3)

无论您设置maxQueryStringLength多大,都会有limit in the browsers。例如,某些浏览器支持的请求长度仅为2048个字符。你的更长(2440个字符)。您唯一能做的就是使用POST代替GET来发送大量数据,因为POST请求没有这样的限制。因此,您生成一个HTML <form>元素,其中method="post"action指向网址,其中包含此数据的隐藏字段,然后提交此表单。

答案 1 :(得分:2)

事实上,我被IIS限制阻止:maxUrl大小和最大查询大小(以八位字节为单位测量:

  <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxUrl="1048576" maxQueryString="1048576" />
        </requestFiltering>
      </security>
  </system.webServer>

这解决了我的问题