2016-05-30 12 views
2

Web.configHTTP-Code 405 (Methode nicht erlaubt) wird, wenn I gesendet POST Daten in ASP.NET WebAPI CORS

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 
<handlers> 
    <remove name="WebDAV"/> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

Regler

[EnableCors(origins: "http://domain/api/Clients", headers: "*", methods: "*")] 
public class ClientsController : ApiController 
{ 
    private ParaNewnergyEntities db = new ParaNewnergyEntities(); 

    // GET: api/Clients 
    public IEnumerable<Client> GetClient() 
    { 
     return db.Client.ToList(); 
    } 
    [HttpPost] 
    public IHttpActionResult PostClient(String Username, String Password) 
    { 
     Client c = new Client 
     { 
      Username = Username, 
      Password = Password 
     }; 

     db.Client.Add(c); 
     db.SaveChanges(); 
     return Ok(c); 
    } 

WebApiConfig.cs

 public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 
     config.EnableCors(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

    } 

Ajax

var sendData={ 
      Username:"gx", 
      Password:"gx" 
     }; 
     $.ajax({ 
      url: "http://domain/api/Clients", 
      type: "POST", 
      data: sendData, 
      success: function (d) { 
       $("#msg").html(d); 
       console.log(d); 
      } 
     }); 

Browser-Fehler:

POST http://domain/api/Clients 405 (Method Not Allowed) 

I API von GET Methode erhalten. Es ist sehr komisch, dass ich Antwort von API erhalten kann, indem POST Methode ohne Beliebiger Parameter. Ansonsten habe ich gerade http Fehler 405.

Zusätzlich bekomme ich HTTP-Fehler 405 von DELETE und PUT-Methode auch. Nur GET und Option Rückkehr httpcode 200.

+0

ich jetzt einen Parameter verwendet haben. Der http-Code ist jetzt 415 –

+0

Ich habe das Problem bereits gelöst. Mein Problem ist: 1. In APIController, wenn ich mehrere Parameter übergeben möchte, sollte ich sie in den einen Parameter setzen, wie Pranay sagte. Das hat mich dazu gebracht, 405 zu bekommen. 2. Ich habe ein paar Probleme mit meinen Modellattributen. Deshalb hat mein Code 500. –

Antwort

1

prüfen dies: Troubleshooting HTTP 405 Errors after Publishing Web API 2 Applications

MVC-Web API: 405 method not allowed


Es gibt ein Problem mit der Art und Weise Sie die Daten Ihrer Methode sind vorbei, wie Sie mehrere Parameter übergeben werden versuchen, Sie sollten versuchen, wie unten

Sie wie

var client = { 
    Username:"gx", 
    Password:"gx" 
} 
$.ajax(
{ 
    url: "http://domain/api/Clients", 
    type: "POST", 
    contentType: "application/json", 
    data: JSON.stringify(client), 
    success: function (result) { 
     alert(result); 
    } 
}); 
sein müssen ajax-Aufruf

und Sie web api Methode wie dieser Beitrag hier überprüfen

[HttpPost] 
    public IHttpActionResult PostClient(Client client) 
    { 
     db.Client.Add(c); 
     db.SaveChanges(); 
     return Ok(c); 
    } 

auch sein: http://weblog.west-wind.com/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API-Controller-Methods

+0

Hallo, Vielen Dank für Ihre Antwort. Ich habe deine Antwort unten versucht. Allerdings habe ich Fehler 500: –

+0

@GaoxinHuang - überprüfen Sie dies: http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web- api-applications –

+0

@GaoxinHuang - überprüfen Sie diese Antwort auch http://stackoverflow.com/questions/23293782/mvc-web-api-405-method-not-allowed –