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.
InformationsquelleAutor sshirley | 2015-03-12
Schreibe einen Kommentar