Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC2控制器中的参数太多或IIS问题?_Asp.net Mvc_Iis_Iis 7_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc MVC2控制器中的参数太多或IIS问题?

Asp.net mvc MVC2控制器中的参数太多或IIS问题?,asp.net-mvc,iis,iis-7,asp.net-mvc-2,Asp.net Mvc,Iis,Iis 7,Asp.net Mvc 2,我使用一个控制器来调用一个需要12个参数的存储过程。这在本地调试模式下(针对远程数据库)非常有效,但在我将其发布到IIS 7服务器时就不行了。它抱怨参数#7,声称没有提供URL URL调用如下所示 有人知道这可能是什么原因吗?在此,任何帮助都将不胜感激 using System; using System.Configuration; using System.Web.Mvc; using System.Data; using System.Text; using System.Data.Sq

我使用一个控制器来调用一个需要12个参数的存储过程。这在本地调试模式下(针对远程数据库)非常有效,但在我将其发布到IIS 7服务器时就不行了。它抱怨参数#7,声称没有提供URL

URL调用如下所示

有人知道这可能是什么原因吗?在此,任何帮助都将不胜感激

using System;
using System.Configuration;
using System.Web.Mvc;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using Prototype.Models;

namespace Prototype.Controllers
{
    public class NameOfStoredProcedureController : Controller
    {

        char[] lastComma = { ',' };

        StringBuilder json = new StringBuilder();

        private String strCon = ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString;
        private SqlConnection con;

        public StoredProcedureController()
        {
            con = new SqlConnection(strCon);
        }

        public string do_NameOfStoredProcedure(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10, int p11, int p12)
        {
            con.Open();

            using (SqlCommand cmd = new SqlCommand("NameOfStoredProcedure", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@parameter1", p1);
                cmd.Parameters.AddWithValue("@parameter2", p2);
                cmd.Parameters.AddWithValue("@parameter3", p3);
                cmd.Parameters.AddWithValue("@parameter4", p4);
                cmd.Parameters.AddWithValue("@parameter5", p5);
                cmd.Parameters.AddWithValue("@parameter6", p6);
                cmd.Parameters.AddWithValue("@parameter7", p7);
                cmd.Parameters.AddWithValue("@parameter8", p8);
                cmd.Parameters.AddWithValue("@parameter9", p9);
                cmd.Parameters.AddWithValue("@parameter10", p10);
                cmd.Parameters.AddWithValue("@parameter11", p11);
                cmd.Parameters.AddWithValue("@parameter12", p12);


                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        json.AppendFormat("[{0},\"{1}\"],", reader["column1"], reader["column2"]);
                    }
                }
                con.Close();
            }

            if (json.Length.ToString().Equals("0"))
            {
                return "[]";
            }

            else
            {
                return "[" + json.ToString().TrimEnd(lastComma) + "]";
            }
        }


        //http://host.com/NameOfStoredProcedure?parameter=value
        public ActionResult Index(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10, int p11, int p12)
        {
            return new ContentResult
            {
                ContentType = "application/json",
                Content = do_NameOfStoredProcedure(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)
            };
        }
    }
}

您是否检查过“获取请求长度限制”

代码有很多问题,但没有一个应该阻止它

你需要调试

  • 在控制器的开始处设置断点,并检查其参数值是否按预期设置

  • 运行SQL Profiler以查看对数据库进行了哪些调用,并检查它是否符合预期


  • 将http参数中的MaxRequestBytes设置为64kb

    需要查看控制器,可能还需要查看模型代码。(URL看起来不错。)@Richard-我会发布代码,但它在本地调试服务器上工作,而不是在实际的IIS服务器上工作,这不是很奇怪吗?嗯,没错。我想在IIS的某个地方也有这样的设置,我对IIS还是非常业余的,但我会去寻找它。谢谢你的建议。看起来有点奇怪,这样一个相对较短的url会超过默认限制。@portland-我设置了内容限制,但仍然没有雪茄。在尝试加载页面时,我也没有收到任何其他错误,只是没有提供所有参数。如果您使用的是IIS 7或更高版本,在requestFiltering部分中有一个名为maxQueryString的属性,允许您控制该属性,默认值2048:除了明显的单元测试不兼容之外,此代码是否存在任何问题?p7和out中的参数没有从URL中获得赋值,前6个是ok的。同样,这一切都在本地工作,因此似乎存在IIS问题。代码问题:(1)conjson字段都应该是本地字段。(2) 命名。(3) 将存储过程直接公开给HTTP GET。如果我能立即看到三个问题,我想可能会有更深层次的问题,随着研究的深入或背景的变化而出现。谢谢,反馈很好。您可以看到的命名问题到底是什么?@cc0:例如,公共方法的名称“do_NameOfStoredProcedure”(为什么是公共的?)及其参数。这里的命名没有作为一种设计方法(在我之前的评论中是问题1和问题3)那么重要。明白了。谢谢你的建议,我会做出相应的改变。正在将更多代码移动到单独的类中。