2017-02-08 2 views
0

Ich habe ein seltsames Problem: Ich habe eine ClientSide App (jquery) gegen eine WebAPI auf der gleichen Domäne ausgeführt. Wenn ich es auf meinem lokalen Computer in IIS hostet, funktioniert es als eine Stammwebsite (Sites-> MyApp) OK (Get und Post). Ein typischer API-Aufruf wie folgt aussieht:Ajax Post to Web API ist erfolgreich, aber .. scheitert auf der Clientseite, wenn gehostet auf Standardwebsite (IIS)

$.get("api/GetList", null, function (data) { 
     var list = data; 
    }) 

aber, wenn ich es unter der "Default Web Site" in IIS hosten, als Unter Anwendung, ein typischer API-Aufruf sieht wie folgen aus:

$.get("MyApp/api/GetList", null, function (data) { 
     var list = data; 
    }) 

Alle GET-Anrufe funktionieren gut, aber der POST-Anruf wirkt seltsam. Ich mache einen POST Aufruf wie folgt:

$.ajax({ 
      url: "MyApp/api/Fields", 
      type: 'POST', 
      dataType: 'json', 
      contentType: false, 
      cache: false, 
      processData: false, 
      data: data, 
      success: function (res) { 
       var x = res;    
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       // 
      } 
     }); 

Die Web-API-Methode wie folgt aussieht:

[HttpPost] 
[Route("api/Fields")] 
public async Task<IHttpActionResult> Post() {... 

Wenn ich den POST Aufruf ausführen, wird es an den Server und die Server-Methode funktioniert gut, aber Wenn es zurückkommt, erhalte ich einen Fehler. Von hier aus: http://localhost/MyApp/index.html ich die Absenden-Button klicken und diese bekommen (auch wenn die Aktion auf Server-Seite gelungen !!): HTTP-Fehler 404.0 - Nicht Angeforderte URL http://localhost:80/api/Fields?input_1=sometext

So Gefunden wie Sie die Route zu MeineAnw sehen können, verschwunden und IIS behandelt die Anfrage als GET, obwohl ich einen POST gemacht habe !! und kehrt zum Stammverzeichnis zurück: Standardwebsite statt zu localhost/MyApp zurückzukehren.

Derselbe Code 1: 1, wenn auf einem Testserver auf IIS mit derselben Konfiguration ausgeführt wird, funktioniert ok ohne diesen Fehler. Irgendwelche Ideen?

+0

Vielleicht zu umformulieren und kürzen es ein bisschen: Ich mache eine AJAX Post auf http: // localhost/MyApp/api/fields (mit F5 in VS2015 Ich sehe, dass es die richtige Methode erreicht) Aber ich bekomme als Antwort: HTTP Fehler 404.0 - Nicht gefunden Angeforderte URL http: // localhost: 80/api/Felder? Input_1 = 123 und: Die angeforderte Ressource unterstützt die HTTP-Methode 'get' nicht !!! 1. Es war ein POST. 2. Ich habe http: // localhost/MyApp/api/fields und nicht http: // localhost: 80/api/Fields aufgerufen. – amira

Antwort

0

Nach zahlreichen Untersuchungen ohne Antwort von der Bahn, als ich plötzlich sah, dass der Formular-Tag ein action-Attribut enthielt !:

<form id="Id" name="Name" action="api/action" enctype="multipart/form-data" novalidate> 

Sobald ich das action-Attribut entfernt, löste es den zusätzlichen api Anruf. Aber ich musste auch das Standardverhalten des Formulars verhindern. Also habe ich den Ajax Beitrag Api Anruf innerhalb der $ (document) .ready Funktion wie folgt:

jQuery(function ($) { 
     var frm = $('#FormId'); 
     frm.submit(function (ev) { 
      ev.preventDefault(); 

      //do validation etc.. 

      //do Ajax Post 
      $.ajax({ 
       url: "api/Fields/", 
       method: 'POST', 
       dataType: 'json', 
       contentType: false,... 
      }); 
      return false; 
     }); 
    }); 

Vergessen Sie nicht, das Formular Standardverhalten zu verhindern!

Verwandte Themen