2017-09-07 3 views
4

Ich habe für 4 Stunden gekämpft und ich habe immer noch keine Lösung bekommen. Ich beantrage bereits einige Änderungen, aber immer noch meinen Beitrag und löschen api den Fehler zurückgibt 500.web api get funktioniert, aber post und löschen nicht funktioniert nach veröffentlicht in iis

GET js

$.getJSON(API_URL + 'api/claim/search', params).done(function (data) { 
    myJsonObject = data; 
    d.resolve(data); 
}); 
return d.promise(); 

API

[Route("api/claim/search")] 
[System.Web.Http.AcceptVerbs("GET")] 
[System.Web.Http.HttpGet] 
public IEnumerable<ClaimInfo> Get([FromUri] ClaimSearch obj_ClaimSearch) 
{ 
    //my code 
} 

Diese erhalten Methode funktioniert 100%

POST js

$.ajax({ 
    type: "POST", 
    data: JSON.stringify(p[0]), 
    url: API_URL + "api/claim/" + (editorPage === "resubmission" ? "saveresubmissionpatient": "savepatient"), 
    contentType: "application/json", 
    success: function (data) { 

    }, 
    error: function() { 

    } 
}); 

API

[Route("api/claim/savepatient")] 
[System.Web.Http.AcceptVerbs("POST")] 
[System.Web.Http.HttpPost] 
public Guid SavePatient([FromBody]ClaimInfo claimInfo) 
{ 
    //my code 
} 

Und hier ist mein WebApi.Config.cs

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

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

} 

ich schon diesen Webserver, was in meiner Config

<modules> 
    <remove name="WebDAVModule" /> 
    <add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v16.2, Version=16.2.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" /> 
</modules> 
<handlers> 
    <remove name="WebDAV" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

</handlers> 
+1

Wenn Sie eine Pause-Punkt in den verdächtigen Aktionen setzen sie schlagen? Tritt der Fehler vor oder nach dem Treffen der Aktion auf? – Nkosi

Antwort

0

ich ein ähnliches Problem hatte anwenden, und es hatte mit dem Namen der Funktion zu tun, die die Anfrage abfing. Aus irgendeinem Grund haben GET-Funktionen dies automatisch getan, aber POST hat dies nicht immer getan. Sie könnten versuchen, explizit es so zu nennen, und sehen, ob es das Problem auch gelöst:

[Route("api/claim/savepatient")] 
[System.Web.Http.AcceptVerbs("POST")] 
[System.Web.Http.HttpPost, ActionName("SavePatient")] 
public Guid SavePatient([FromBody]ClaimInfo claimInfo) 
{ 
    //my code 
} 

Bitte beachte, dass es [System.Web.Http.HttpPost]-[System.Web.Http.HttpPost, ActionName("SavePatient")] geändert

0

Sie die Aktion mit dem Namen haben „savepatient“ statt Post. Der Router passt/api/{Controller} an Ihre Controller-Klasse {Controller} an. Die HTTP-Methode muss mit der öffentlichen Methode der Klasse übereinstimmen. Versuchen Sie, "SavePatient" in "Post" umzubenennen (oder "Put", wenn Sie diese Methode verwenden).

public class ClaimController : ApiBaseController 
{ 
//[Route("api/claim/")] don't need this 
public Guid Post([FromBody]ClaimInfo claimInfo) 
{ 
    //my code to add new claiminfo 
} 
//[Route("api/claim/")] don't need this 
public Guid Put([FromBody]ClaimInfo claimInfo) 
{ 
    //my code to edit claiminfo 
} 

und entfernen Sie den zusätzlichen Weg auf der url:

url: API_URL + "api/claim/" 
Verwandte Themen