2017-01-10 15 views
1

$ .http reqeust und Web-api sowohl auf localhost, aber unterschiedliche Anwendungen„Die angeforderte Ressource http-Methode 'POST' nicht unterstützt - 405 Antwort

Winkel js (in anderer asp.net Anwendung)

.
return $http({ 
    method: "POST",      
    url: config.APIURL + 'Parts', 
    data: {'final':'final'}, 
    headers: { 'Content-Type': 'application/json' } 
}); 

web api (in getrennter Anwendung)

[HttpPost] 
public Part Post(string final) 
{ 
       ... 
} 

Fehler respon se:

{ "message": "Die angeforderte Ressource nicht unterstützt HTTP-Methode 'POST'."}

web api 2 - bereits markiert mit [Httppost] obwohl nicht brauchen.

Mein reqeust und Antwortpaket sind wie folgt:

**General** 
    Request URL:http://localhost/SigmaNest.WebAPI/api/Parts 
    Request Method:POST 
    Status Code:405 Method Not Allowed 
    Remote Address:[::1]:80 
    **Response Headers** 
    view source 
    Allow:GET 
    Cache-Control:no-cache 
    Content-Length:73 
    Content-Type:application/json; charset=utf-8 
    Date:Tue, 10 Jan 2017 13:05:59 GMT 
    Expires:-1 
    Pragma:no-cache 
    Server:Microsoft-IIS/10.0 
    X-AspNet-Version:4.0.30319 
    X-Powered-By:ASP.NET 
    **Request Headers** 
    view source 
    Accept:application/json, text/plain, */* 
    Accept-Encoding:gzip, deflate, br 
    Accept-Language:en-US,en;q=0.8 
    Connection:keep-alive 
    Content-Length:17 
    Content-Type:application/json;charset=UTF-8 
    Host:localhost 
    Origin:http://localhost 
    Referer:http://localhost/SigmaNest.Web/app/views/index.html 
    User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
    **Request Payload** 
    view source 
    {final: "final"} 
    final 
    : 
    "final" 

kann jemand mir bitte helfen, diese 405 Fehler zu beheben.

+0

Bitte übergeben Sie die Server-Seite Code –

+0

ist bereits veröffentlicht. – dsi

Antwort

1

ASP.Net hat Schwierigkeiten, Ihren Ajax-Post mit einer geeigneten Controller-Aktion abzugleichen, da es keinen gibt, der dem entspricht, was Sie anrufen möchten.

In diesem Fall versuchen Sie, ein Objekt {'final':'final'} zu übergeben, aber akzeptieren eine Zeichenfolge. Post(string final) und ASP.Net können dies keiner bestimmten Aktion zuordnen, für die POST aktiviert ist.

Sie können Ihr Javascript-Objekt

return $http({ 
    method: "POST",      
    url: config.APIURL + 'Parts', 
    data: JSON.stringify({'final':'final'}), // Strinify your object 
    headers: { 'Content-Type': 'application/json' } 
}); 

Oder, ändern Sie Ihre Server-Seite Methode, um eine Klasse zu erhalten, um mit dem Objekt, das Sie liefern stringify. Zum Beispiel:

// DTO MyObject - .Net will ModelBind your javascript object to this when you post 
public class MyObject{ 
    public string final {get;set;} 
} 
// change string here to your DTO MyObject 
public Part Post(MyObject final){ 
     ... 
} 
+0

Vielen Dank. Es klappt. :) Danke auch für die Erklärung. – dsi

+0

Gern geschehen. Und Erklärungen sind wichtig :) So viele Leute schreiben einfach den Code – Darren

+0

ja. Recht. Vielen Dank. – dsi

Verwandte Themen