webapi post-Methode mit Parameter funktioniert nicht
Wenn ich Anrufe, meinen webAPI-controller, enthält eine post-Methode OHNE Parameter geht es um die Methode. Wenn ich allerdings Parameter übergeben (und wenn ich aktualisieren die api-controller mit Parameter) in diesem finden Sie das snippet unter dem 1. snippet bekomme ich den 405 Fehler, dass es nicht unterstützt POST.
var captchURL = "/api/Captcha";
$.ajax({
url: captchURL,
dataType: 'json',
contentType: 'application/json',
type: 'POST'
})
var jsondata = {solution: "7", answer: "7"};
var captchURL = "/api/Captcha";
$.ajax({
url: captchURL,
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data: JSON.stringify(jsondata)
})
UPDATE - Controller-Code:
public class CaptchaController : ApiController
{
private readonly ICaptchaService _service;
public CaptchaController(ICaptchaService service)
{
_service = service;
}
public Captcha Get()
{
return _service.Get();
}
[HttpPost]
public bool Post(string solution, string answer)
{
return _service.Post();
}
}
UPDATE - WebApiConfig:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Ist es, weil ich nicht die Lösung und Antwort params (in meinem WebApiConfig), dass es nicht erkennt?
Was mache ich falsch?
Post-code vom controller
Ich aktualisierte mit der controller-code - ich habe auch gerade Hinzugefügt, die Parameter der Post-Methode
warum hast du stringify die Daten, die ich denke, Sie sollten nicht
versucht es beide Wege, und bekam den gleichen Fehler.
Haben Sie die Konsole, um zu sehen, ob es irgendwelche Fehler protokolliert?
Ich aktualisierte mit der controller-code - ich habe auch gerade Hinzugefügt, die Parameter der Post-Methode
warum hast du stringify die Daten, die ich denke, Sie sollten nicht
data: jsondata
ist genugversucht es beide Wege, und bekam den gleichen Fehler.
Haben Sie die Konsole, um zu sehen, ob es irgendwelche Fehler protokolliert?
InformationsquelleAutor webdad3 | 2015-12-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine etwas andere Methode der Einstellung der Strecke, aber ich bevorzuge es.
In Ihrem controller-code hinzufügen einer route für Präfix und Routen für jede Methode dar, eine POST-GET-request...
Sollte dies funktionieren, solange Sie die Einstellung der Pfad richtig, mit der korrekt typisierten Parametern und die Rückgabe einer korrekt eingegeben Wert. Wenn Sie ein Modell, dann müssen Sie nicht haben, fügen Sie die Parameter in der Route-Pfad.
Dieser arbeitete für mich, wenn ich die Einstellung wurde meine WebAPI. Wenn jemand sieht, nichts falsch mit Erklärung, bitte lassen Sie mich wissen. Ich Lerne immer noch (und wird es immer sein), aber wollte nur lassen Sie wissen, was ich Tat, arbeitete.
InformationsquelleAutor M. Carlson
erstellen Sie ein Modell
den controller ist diese
sind Sie sicher, dass Ihre uri korrekt ist? versuchen Sie, dies zu tun var captchURL = "api/captcha";
positiv. Ich habe die captchURL auch keine Veränderung.
versuchen, Sie zu entfernen private readonly ICaptchaService _service; public CaptchaController(ICaptchaService service) { _service = service; }
InformationsquelleAutor Mauro Sala
Fügen Sie ein weiteres MapHttpRoute akzeptieren wird 'Lösung " und "Antwort Parameter'
Beispiel :
InformationsquelleAutor Umesh Kadam
Und
Ändern
data: JSON.stringify(jsondata)
zudata : jsondata
.InformationsquelleAutor Bimal Das
Der Grund, warum es nicht funktioniert ist, weil es nicht route wird akzeptieren, dass 2 parameter an Ihre [post] - Adresse - api/captcha/.
haben Sie 2 Möglichkeiten, entweder Attribut-routing im controller als
oder ein Modell erstellen, wie
- Und in deiner action Methode
InformationsquelleAutor Preet Singh
Laut http://www.asp.net,
", wenn eine HTTP-Methode ist konfiguriert für die Verwendung auf dem server, aber es wurde deaktiviert, für einen bestimmten URI, der server antwortet mit einer HTTP 405 Methode Nicht Erlaubt-Fehler".
Weiterer Verweis auf 405
http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications
InformationsquelleAutor pubudut
Müssen Sie entfernen JSON.stringify(data) von Ihrem Wunsch und fügen Sie dann [FromBody] vor deinem Modell. Dann wird es funktionieren.
InformationsquelleAutor Ro.