Ajax-POST-Aufruf ASP.NET MVC-controller geben, net::ERR_CONNECTION_RESET
Ich bin mit meinem Latein am Ende dieses problem. Ich habe ein ASP.NET MVC 5 website, die ich bin, zu entwickeln und lokal ausgeführt. Ich habe SSL aktiviert auf der Website. Ich habe eine selbst-signiertes Zertifikat für die site. Wenn ich einen ajax-POST-Aufruf an einen MVC-controller:
$.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();
}
}
});
Bekomme ich die folgende Fehlermeldung in der JavaScript-Konsole in Chrome: "net::ERR_CONNECTION_RESET". Es funktioniert nicht in jedem anderen browser.
Ich weiß, dieser Fehler hat etwas zu tun mit SSL. Wie ich schon sagte, ich habe ein gültiges Zertifikat für diese Website. Es sei denn, ich bin fehlt etwas, meine tools (Chrome dev tools, Einblick, Spielmann) werden mir nicht sagen, etwas sinnvolles.
Irgendwelche Ideen?
Update (13 March 2015):
Also bei der weiteren Untersuchung fand ich, dass die MVC-controller-action ist in der Tat aufgerufen wird. In dieser Methode, bin ich wieder eine Instanz der 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");
}
}
Nach der Methode kehrt mit einem HTTP-200-code, dann bekomme ich den "net:: ERR_CONNECTION_RESET" in Chrome (und Fehler in anderen Browsern). Es ist wichtig zu beachten, dass die 200-code-handler in der jQuery .ajax-Aufruf wird nie aufgerufen. die Verbindung wird zurückgesetzt, sofort nach der Rückkehr.
Laut einigen blogs, ich sollte erhöhen Sie die maxRequestLength, die ich habe:
<system.web>
<httpRuntime targetFramework="4.5"
maxRequestLength="10485760" executionTimeout="36000" />
</system.web>
Aber das hat nicht geklappt.
Update (13 March 2015):
Also änderte ich das $.ajax-Aufruf zu reagieren, um den Erfolg-und Fehler-im Gegensatz zu spezifischen status-codes wie folgt:
$.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);
}
});
Nun, obwohl ich bin wieder zurück 200 von meinem controller-code, der den Fehler block geschlagen. So, das ist Fortschritt. ABER, der textStatus ist einfach "Fehler" und jqXHR.status ist einfach 0.
Irgendwelche Ideen?
- Wenn ich auf Debuggen würde ich anfangen, durch die überprüfung von content-Typen. Sie könnten versuchen, hinzufügen, dataType: "text" und das auskommentieren der "akzeptiert". Nur etwas, das ich begonnen habe, mich mit mir selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich das gleiche problem. In meiner situation, die innere Ausnahme, die Nachricht enthielt ein \r\n Charakter. Nach dem Test merkte ich, dass die statusDescription parameter in HttpStatusCodeResult nicht wie diese. (Ich bin mir nicht sicher, warum) ich benutzte einfach den code unten, um Zeichen entfernen und dann alles funktionierte wie erwartet.
Hoffentlich jemand anderes helfen! 🙂
Habe ich das Problem gelöst. Ich verstehe nicht, warum das so ist, aber es scheint, als ob die stabilere Lösung ist der Rücksendung eine Instanz von HttpStatusCodeResult ist, was verursacht wurde die Verbindung zurückgesetzt. Wenn ich die Response-status-code und eine JToken Objekt etwa so:
Alles funktioniert Prima.
Ich würde gerne verstehen, warum. Aber, für jetzt, das ist meine Lösung.
Ich hatte dieses Problem auch, und auch dachte, es war ein SSL-Problem, aber in meinem Fall ist die Auswahl der Daten aus dem Objekt-ich wurde wieder in eine neue anonyme Objekt wurde das Problem behoben, z.B.:
Ich habe keine Ahnung, warum das funktioniert, das oben ist nur ein Beispiel, in meinem konkreten Fall hatte ich ein Dutzend Eigenschaften, einschließlich der Eigenschaften, wurden andere Objekte. Ich kopierte alle Eigenschaften des anonymen Objekt und es begann zu arbeiten.