【问题标题】:Bad request on jQuery post to Asp.Net MVC, some networks onlyjQuery post 到 Asp.Net MVC 的错误请求,仅限某些网络
【发布时间】:2017-02-14 21:34:30
【问题描述】:

我已部署到 QA 服务器,该解决方案对我来说运行良好,但在一些限制性更强的网络上,它的行为会有所不同。代码如下:

function RegisterSubmit() {
    ShowSpinner();
    jQuery.post("@Url.Action("Register", "Home")", jQuery('form#register-form').serialize(),
    function (data) { }).done(function (successData) {
        // handle success
    }).fail(function (xhr, textStatus, errorThrown) {
        ShowError('error-message-register', errorThrown);
        grecaptcha.reset();
        HideSpinner();
    });
}

这成功调用了控制器,该控制器将日志写入数据库,但出现异常,我可以看到这一切正常。它似乎失败的地方是错误是如何返回给浏览器的。我正在使用以下,通常可以正常工作:

[AllowAnonymous]
[HttpPost]
public ActionResult Register(RegisterViewModel model, string returnUrl)
{
    try
    {
        model.Validate();
        RecaptchaValidator.Validate(TenantId, Request);

        // happy path
    }
    catch (Exception ex)
    {
        LogException(ex);
        return ThrowJsonError(ex);
    }
}

它使用以下内容:

public JsonResult ThrowJsonError(string message)
{
    Response.StatusCode = (int) System.Net.HttpStatusCode.BadRequest;
    Response.StatusDescription = message;
    return Json(new {Message = message}, JsonRequestBehavior.AllowGet);
}

仅在这一网络上,它不显示错误消息,而是显示“错误请求”。有什么想法/解决方案吗?

更新 附带说明一下,此代码的成功案例运行良好,因此到达服务器没有问题。只有当我们在控制器中抛出错误并希望它在视图中被捕获并显示在浏览器中时,才会出现此问题。

【问题讨论】:

  • 记录的异常是什么??
  • 这是我自定义的ValidationException model.Validate()。正如预期的那样,我希望向用户显示该异常的Message 部分。它通常会发生,除了在那个环境中。
  • 环境是什么意思。配置是什么?
  • 他们的网络管理员似乎创建了相当严格的设置。许多网站被禁止,我们经常需要请求 IP 或端口被解锁。 Firefox 和装订也存在问题,但测试不适用于 Chrome,所以这不是问题。换句话说,我没有完全处理这个问题,但我想确保没有明显的代码问题。
  • 更新:我补充了一点说明

标签: jquery asp.net-mvc


【解决方案1】:

检查此示例代码

$.ajax({ //actually approve or reject the promotion
url: @Url.Content("~/Home/Index"),
type: "POST",
data: JSON.stringify({ 
    // Those property names must match the property names of your PromotionDecision  view model
    promotionId: data.PromotionId, 
    userId: data.UserId, 
    reasonText: data.ReasonText
}),
contentType: "application/json; charset=utf-8",
success: function (data) {
    if (indicator == 'A') {
        alert('Promotion approved successfully!');
    }
    else {
        alert('Promotion rejected successfully.');
    }

    var homelink = '@Url.Action("Index","Home")';
    window.location.href = (homelink);

    returndata = data;
},
error: function (xhRequest, ErrorText, thrownError) {
    alert("Failed to process promotion correctly, please try again");
    console.log('xhRequest: ' + xhRequest + "\n");
    console.log('ErrorText: ' + ErrorText + "\n");
    console.log('thrownError: ' + thrownError + "\n");
}

});

来自Continually receiving 400 (Bad Request) on jquery ajax post to MVC controller

【讨论】:

  • 这是一种稍微不同的做事方式,但它并不能确定真正的问题
  • 我在很多地方都使用了我的模式,所以如果我大量更改模式,我必须更改很多代码
  • 我找不到解决方案,所以我重组了我的代码,按照上面的方法在 Ajax 返回上传递一个布尔值
猜你喜欢
  • 2012-08-24
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多