【问题标题】:ASP.NET MVC Ajax call not working on production serverASP.NET MVC Ajax 调用在生产服务器上不起作用
【发布时间】:2017-02-18 21:43:42
【问题描述】:

它在本地主机上就像一个魅力,但在生产服务器上根本不工作。

我的控制器方法是这样的:

[HttpPost]
public JsonResult VisualizaDebitos()
{
    var filtro = Request["filtro"];
    var emissao = DateTime.Parse(Request["emissao"]);
    var vencimento = DateTime.Parse(Request["vencimento"]);
    var mesCompetencia = int.Parse(Request["mesCompetencia"]);
    var anoCompetencia = int.Parse(Request["anoCompetencia"]);

    return Json(new { data = someprocesseddata }, JsonRequestBehavior.AllowGet);
}

还有 ajax 调用:

$.ajax({
    url: "/Mensalidade/VisualizaDebitos",
    datatype: "json",
    type: "POST",
    data: {
        filtro: $("#Participante").val(),
        emissao: $("#Emissao").val(),
        vencimento: $("#Vencimento").val(),
        mesCompetencia: parseInt($("#MesCompetencia").val()),
        anoCompetencia: parseInt($("#AnoCompetencia").val())
    },
    error: function (data) {
        if (data.status == 500) {
            jAlert('Response status: ' + data.status + ' (' + data.statusText + ')' +
                '\n\nVerifique se a url e/ou os parâmetros estão corretos e tente novamente.', 'Error');
        } else {
            jAlert('Error', 'Unknown error');
        }
    },
    success: function (result) {
        console.log(result.someprocesseddata);
        return false;
    }
});

我收到错误 500 内部服务器错误

我错过了什么?

【问题讨论】:

  • 这样使用网址:@Url.Action("VisualizaDebitos", "Mensalidade")
  • 您说的是 500 错误...异常的详细信息是什么?
  • 当你在控制器上设置断点时,它是否命中断点?如果是,你得到所有的值了吗?
  • @mybirthname 仅此而已:错误 500 内部服务器错误 :(
  • 将所有解析更改为 TryParse,可能某些 Request[X] is not valid datetime or int

标签: c# jquery asp.net ajax asp.net-mvc


【解决方案1】:

尝试以下方法:

var RootUrl = '@Url.Content("~/")';

然后把url调整成这样:

url: RootUrl + "Mensalidade/VisualizaDebitos",

编辑: 我已经尝试了一些事情来看看如何或什么,但似乎更多的是处理错误,而不是发布错误。 使用以下代码:

<input type="text" id="Participante" /><br />
<input type="text" id="Emissao" /><br />
<input type="text" id="Vencimento" /><br />
<input type="text" id="MesCompetencia" /><br />
<input type="text" id="AnoCompetencia" /><br />

<button onclick="test()">gotest</button>

<script>
    function test() {
        $.ajax({
            url: "/Home/VisualizaDebitos",
            datatype: "json",
            type: "POST",
            data: {
                filtro: $("#Participante").val(),
                emissao: $("#Emissao").val(),
                vencimento: $("#Vencimento").val(),
                mesCompetencia: parseInt($("#MesCompetencia").val()),
                anoCompetencia: parseInt($("#AnoCompetencia").val())
            },
            error: function (data) {
                if (data.status == 500) {
                    alert('500');
                } else {
                    alert('Unknown error');
                }
            },
            success: function (result) {
                alert('success');
                return false;
            }
        });
    }
</script>

您在 HTTPPost 中的代码似乎都适用于以下值: 测试 01-01-2016 01-01-2016 5 6

但是,如果我在文本框中输入日期或数字以外的其他内容,则会引发 500 错误。 那么这个输入是怎样的呢?格式正确吗?

【讨论】:

  • 就像我说的那样,它只使用一个字符串参数,所以我认为这不是 url 问题。
  • 我注意到传入的日期参数与其 url 编码等效: filtro=2030%2C1078&emissao=10%2F10%2F2016&vencimento=05%2F11%2F2016&mesCompetencia=10&anoCompetencia=2016 没有看到任何错误用那个。
  • 用您的数据进行测试后,问题出在第二个日期时间上。当我使用日期 05/11‌​/2016 运行测试时,我收到 500 错误。当我在 2016 年 11 月 5 日进行测试时,它可以工作。
【解决方案2】:

您可以使用url:'@Url.Action("VisualizaDebitos","Mensalidade")' 代替url: "/Mensalidade/VisualizaDebitos"

【讨论】:

  • 您应该解释有什么区别以及这将如何提供帮助。最好的问候
【解决方案3】:

请尝试 1 件事,用完整路径替换下面的 url 并检查它是否有效。

url: "/Mensalidade/VisualizaDebitos",

如果有效则需要使用绝对路径。

已编辑:-

或者请仅在 post 参数和测试中发送字符串值。就像您发送 int 值一样,将其设为字符串,然后您可以在控制器方法中将其转换为 int。

【讨论】:

  • 当 String 参数唤醒时,我还尝试使用“JSON.stringify()”方法对所有内容进行字符串化。但也没有工作......它让我发疯!
  • 不幸的是,这些响应都没有奏效。但我认为这不是 Ajax 调用问题。似乎问题出在服务器或更具体的 IIS 上。经过一些更改(包括此处的所有提示),我在网络选项卡上遇到了一些不同的错误,就像@Div 说的那样。查看以下图片:img-1img-2img-3 更多想法?
  • 您是否在代码中使用“Process()”?您是否在代码中指定了硬编码路径?
  • 是的!答对了!!上次部署时缺少 exe 文件。谢谢大家!抱歉回复晚了;)
【解决方案4】:
var form = new FormData();
form.append("filtro", $("#Participante").val());
form.append("emissao", "$("#Participante").val());
form.append("vencimento",$("#Vencimento").val());
form.append("mesCompetencia", parseInt($("#MesCompetencia").val()));
form.append("anoCompetencia", "parseInt($("#AnoCompetencia").val()));


var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://",
  "method": "POST",
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

你在做什么很愚蠢,我不会解释为什么,但这是你学习的方式。 我建议定义一个模型并期望该模型作为 json 数据发布在您的端点上,或者让您的手脏 lil' bit https://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-helpers-forms-and-validation

【讨论】:

    【解决方案5】:

    尝试在您的 ajax 代码中将您的数据参数替换为以下数据参数:

     data: {
            'filtro': $("#Participante").val(),
            'emissao': $("#Emissao").val(),
            'vencimento': $("#Vencimento").val(),
            'mesCompetencia': parseInt($("#MesCompetencia").val()),
            'anoCompetencia': parseInt($("#AnoCompetencia").val())
        },
    

    【讨论】:

    【解决方案6】:

    很遗憾,这些回复都没有帮助到我。但我认为这不是 Ajax 调用问题。似乎问题出在服务器或更具体的 IIS 上。经过一些更改(包括此处的所有提示)后,我在网络选项卡上遇到了一些不同的错误,就像@Div 说的那样。

    查看图片:

    • https://s21.postimg.org/fz6r1ww4n/image.png
    • https://s21.postimg.org/s2c2ph76v/image.png
    • https://s14.postimg.org/78vu85srl/image.png

    更多想法?

    【讨论】:

      【解决方案7】:

      我在服务器 IIS 上托管的应用程序遇到了完全相同的问题。当我尝试调用 ajax post 方法时,我收到了同样的错误消息。最后,我在托管服务器上使用 Internet Explorer 进行故障排除。

      我通过在 IE 上禁用“显示友好的 HTTP 错误消息”来解决问题。禁用友好的 HTTP 错误消息以查看原始内容是否可以提供查看更多内容的方向。步骤:

      • 转到 IE 中的菜单工具/Internet 选项。
      • 单击“高级”选项卡,然后取消选中“显示友好的 HTTP 错误” 消息”选项,然后单击“确定”。
      • 现在,当访问同一个网页时,更多的开发人员 将显示有意义的错误消息。

      如果您想返回实际的错误详细信息,例如异常详细信息、某些 div 元素上的堆栈跟踪,

      &lt;div id="dialog" style="display: none"&gt;&lt;/div&gt;

      你可以修改你的ajax function

      $.ajax({
          url: "/Mensalidade/VisualizaDebitos",
          datatype: "json",
          type: "POST",
          data: {
              filtro: $("#Participante").val(),
              emissao: $("#Emissao").val(),
              vencimento: $("#Vencimento").val(),
              mesCompetencia: parseInt($("#MesCompetencia").val()),
              anoCompetencia: parseInt($("#AnoCompetencia").val())
          },
          error: OnError
      });
      

      并将onError函数调用为:

      function OnError(xhr, errorType, exception) {
                      var responseText;
                      $("#dialog").html("");
                      try {
                          responseText = jQuery.parseJSON(xhr.responseText);
                          $("#dialog").append("<div><b>" + errorType + " " + exception + "</b></div>");
                          $("#dialog").append("<div><u>Exception</u>:<br /><br />" + responseText.ExceptionType + "</div>");
                          $("#dialog").append("<div><u>StackTrace</u>:<br /><br />" + responseText.StackTrace + "</div>");
                          $("#dialog").append("<div><u>Message</u>:<br /><br />" + responseText.Message + "</div>");
                      } catch (e) {
                          responseText = xhr.responseText;
                          $("#dialog").html(responseText);
                      }
                      $("#dialog").dialog({
                          title: "jQuery Exception Details",
                          width: 700,
                          buttons: {
                              Close: function () {
                                  $(this).dialog('close');
                              }
                          }
                      });
                  }
      

      参考:This article

      【讨论】:

        【解决方案8】:

        问题可能是数据库访问。如果它在 Staging/Dev Server 中工作,您可能拥有正确的所有代码...意味着您需要将服务器添加为 SQL Server(或您选择的数据库)的登录名。

        以下适用于 SQL Server...您的里程可能会有所不同:

        1. 创建一个名为“Domain\Server$”的新 SQL Server 登录名并单击“确定”(不要尝试使用“检查名称”选项验证此用户。)

        2. 根据需要重新打开新用户并修改属性和授予权限。

        3. 刷新您的网站并等待奇迹。

        我知道这是一个老问题,但这是您期待已久的解决方案(或者至少对我来说是这样)。

        ;-)

        【讨论】:

          猜你喜欢
          • 2016-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-13
          • 1970-01-01
          • 1970-01-01
          • 2016-05-15
          • 1970-01-01
          相关资源
          最近更新 更多