gpt4 book ai didi

c# - 对 ASP.NET MVC Controller 的 Ajax POST 调用给出 net::ERR_CONNECTION_RESET

转载 作者:行者123 更新时间:2023-12-04 15:10:27 24 4
gpt4 key购买 nike

我对这个问题无能为力。我创建了一个正在本地开发和运行的 ASP.NET MVC 5 网站。我在网站上启用了 SSL。我已经为该站点创建了一个自签名证书。当我对 MVC Controller 进行 ajax POST 调用时:

$.ajax({
url: "/Shop/AddToCart/" + id,
contentType: "application/json; charset=utf-8",
type: "POST",
accepts: {
json: "application/json, text/javascript"
},
statusCode: {
200: function(data) {
$("#successAlert").show();
$(function () {
var returnObject = data;
layoutVM.addProduct(returnObject);
});
},
400: function() {
$("#errorAlert").show();
}
}
});

我在 Chrome 的 JavaScript 控制台中收到以下错误:“net::ERR_CONNECTION_RESET”。它也不适用于任何其他浏览器。

我知道这个错误与 SSL 有关。正如我所说,我已经为这个站点创建了一个有效的证书。除非我遗漏了什么,否则我的工具(Chrome 开发工具、Glimpse、Fiddler)并没有告诉我任何有用的信息。

有任何想法吗?

更新(2015 年 3 月 13 日):

所以经过进一步调查,我发现确实调用了 MVC Controller 操作。在该方法中,我返回 HttpStatusCodeResult 的一个实例:
[HttpPost]
public ActionResult AddToCart(int id)
{
int numChanges = 0;
var cart = ShoppingCart.GetCart(httpContextBase);
Data.Product product = null;
_productRepository = new ProductRepository();

product = _productRepository.GetProducts()
.Where(x => x.ProductID == Convert.ToInt32(id)).FirstOrDefault();

if (product != null)
{
numChanges = cart.AddToCart(product);
}

if (numChanges > 0)
{
JToken json = JObject.Parse("{ 'id' : " + id + " , 'name' : '" +
product.Name + "', 'price' : '" + product.Price + "',
'count' : '" + numChanges + "' }");
return new HttpStatusCodeResult(200, json.ToString());
}
else
{
return new HttpStatusCodeResult(400, "Product couldn't be added to the cart");
}

}

该方法返回 HTTP 200 代码后,我在 Chrome 中得到“net:: ERR_CONNECTION_RESET”(在其他浏览器中出现错误)。需要注意的是,jQuery .ajax 调用中的 200 代码处理程序从未被调用。返回后立即重置连接。

根据一些博客,我应该增加 maxRequestLength,我有:
<system.web>
<httpRuntime targetFramework="4.5"
maxRequestLength="10485760" executionTimeout="36000" />
</system.web>

但这并没有奏效。

更新(2015 年 3 月 13 日):

所以我改变了 $.ajax 调用来响应成功和错误,而不是像这样的特定状态代码:
$.ajax({
url: "/Shop/AddToCart/" + id,
contentType: "application/json; charset=utf-8",
type: "POST",
accepts: {
json: "application/json, text/javascript"
},
success: function (data, textStatus, jqXHR) {
// jqXHR.status contains the Response.Status set on the server
alert(data);
},
error: function (jqXHR, textStatus, errorThrown) {
// jqXHR.status contains the Response.Status set on the server
alert(jqXHR.statusCode + ": " + jqXHR.status);
}
});

现在,即使我从 Controller 代码返回 200,错误块也被命中。所以,这就是进步。但是,textStatus 只是“错误”,而 jqXHR.status 只是 0。

有任何想法吗?

最佳答案

我也遇到过同样的问题。在我的情况下,内部异常消息包含 \r\n 特点。经过测试,我意识到状态说明 中的参数HttpStatusCodeResult 不喜欢这个。 (我不知道为什么)我只是使用下面的代码来删除字符,然后一切都按预期工作。

exception.Message.Replace("\r\n", string.Empty);

希望这会帮助别人! :)

关于c# - 对 ASP.NET MVC Controller 的 Ajax POST 调用给出 net::ERR_CONNECTION_RESET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29016331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com