Mon application de test a été développée en utilisant le modèle vide de l'application web Vs 2013 en utilisant Web Api.Web API 2 - Méthode IIS7 POST. 405 - non autorisé après avoir essayé toutes les solutions possibles
C'est ce que mon initialisation de routage ressemble:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
}
}
C'est ce que mon contrôleur ressemble à:
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class TestController : ApiController
{
[Route ("Test")]
[HttpGet]
public string Get()
{
return "Response to get Request";
}
[Route("Test")]
[HttpPost]
public string Post(string text)
{
return string.Format("Received: '{0}'", text);
}
}
C'est ce que mon fichier web.config ressemble après y compris tous ont suggéré des corrections :
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
<add name="HttpPut" />
<add name="HttpDelete" />
</protocols>
</webServices>
</system.web>
<system.webServer>
<handlers>
<remove name="WebDAV" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<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>
<security>
<requestFiltering>
<verbs allowUnlisted="false">
<add verb="GET" allowed="true" />
<add verb="POST" allowed="true" />
<add verb="DELETE" allowed="true" />
<add verb="PUT" allowed="true" />
</verbs>
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
J'ai vérifié les mappages de gestionnaire et le filtrage des demandes de mon application utilisant le gestionnaire IIS et le verbe POST apparaît comme activé.
J'ai tracé les demandes rejetées par ISS et je trouve que le ManagedPipeLineHandler définit l'erreur 405 comme on le voit ci-dessous:
ModuleName ManagedPipelineHandler
notification 128
httpStatus 405
Méthode HttpReason non autorisée
HttpSubStatus 0
ErrorCode 0
ConfigExceptionInfo
Avis EXECUTE_REQUEST_HANDLER
ERRORCODE L'opération terminée avec succès. (0x0)
Mon hypothèse est que la demande ne va pas à mon application. Ai-je raison? J'ai testé en utilisant Fiddler et j'ai trouvé que les en-têtes de réponse ont une section nommée 'Security' avec une seule ligne lisant 'Allow: GET', ce qui pourrait expliquer pourquoi Get fonctionne mais pas le POST.
D'où vient cette information? La réponse à cette question peut m'amener à une solution.
J'ai passé de nombreuses heures à essayer de résoudre ce problème sans aucune chance. Toute rétroaction sera grandement appréciée.