2017-09-29 5 views
0

J'ai un contrôleur Web Api et j'ai testé toutes les actions sur localhost et cela fonctionne bien.Mais quand je l'ai publié sur le serveur Web, Just Actions avec [HttpGet] fonctionne et [HttpPost] Actions retour Http erreur 405Erreurs HTTP 405 après la publication de l'API Web 2 Applications

public class ContentController : ApiController 
{ 
    [HttpGet] 
    public async Task<IHttpActionResult> AdvantageList() 
    { 
     //return ok 200 
    } 
    [HttpPost] 
    public async Task<IHttpActionResult> SaveAdvantage(ContentModel model) 
    { 
     //return 405 
    } 
} 

je méthode ci-dessous sur le client

var r = await ClientManager.Client.PostAsJsonAsync("api/Content/SaveAdvantage", Advantage); 

mais ce sera retrun ci-dessous formulaire de réponse server.I Utilisé PostAsJsonAsync méthode, mais il dit que The requested resource does not support http method 'GET' Quelqu'un sait-il pourquoi?

{ StatusCode: 405, ReasonPhrase: 'Méthode non autorisée', Version: 1.0, Contenu: System.Net.Http.StreamContent, en-têtes: { Pragma: no-cache Powered-By-X -Plesk: PleskWin Connection: close cache-Control: no-cache date: ven 29 septembre 2017 08:53:51 GMT serveur: Microsoft-IIS/8.0 X-réSEAU-version: 4.0.30319 X -Powered-By: ASP.NET Longueur du contenu: 72 Autoriser: POST Type de contenu: application/json; charset = utf-8 Expires: -1 }}

Et

"{\" un message \ ": \". La ressource demandée ne supporte pas la méthode http 'GET' \ » } »

je le ci-dessous dans ma config web api:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}"); 
     config.Routes.MapHttpRoute("WithId", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }); 
     config.Routes.MapHttpRoute("TwoId", "api/{controller}/{action}/{id}/{id2}", new { id = RouteParameter.Optional, id2 = RouteParameter.Optional }); 

     config.MapHttpAttributeRoutes(); 

     var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
     formatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); 
    } 
} 

J'ai ci-dessous les gestionnaires dans Web.config

<system.webServer> 
<handlers> 
    <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> 
</system.webServer> 

J'utilise cette application webapi2 dans mon application Winform.

Répondre

-1

Vous avez un problème de droite sur le serveur Web. 405 code http signifie que la méthode de publication n'est pas autorisée à utiliser à partir de votre serveur Web. Assurez-vous que vous êtes authentifié lorsque vous envoyez une demande et assurez-vous également que votre demande contient un jeton pour l'authentification.

+0

Non, ce contorller est permis pour anonymouse, si cette raison a fait problème pourquoi je reçois tout le contenu avantage avec succès? – mohsen

0

En hébergement Réglage dans mon serveur web, avait une propriété de domaine préféré, je l'ai changé aucun et après que cela a fonctionné correctement

Preferred Domain Setting