L'api Web ne supporte pas la méthode POST

dans mon contrôleur d'api web j'ai une fonction avec les codes suivants

       [HttpPost]
        public HttpResponseMessage Post(string schooltypeName)
        {
            _schoolTypeService.RegisterSchoolType(schooltypeName);

            var message = Request.CreateResponse(HttpStatusCode.Created);

            return message;
        }

quand j'appelle avec fiddler je reçois cette erreur

{"Message":"The requested resource does not support http method 'POST'."}

mon tripoter les paramètres sont

en-Tête

User-Agent: Fiddler

Host: myhost:8823

Content-Type: application/json; charset=utf-8

Content-Length: 26

corps de la Requête

{"schooltypeName":"Aided"}

Demander l'url

http://myhost:8823/SchoolType

(j'ai configuré url, GET fonctionne avec cette url)

quel est le problème ici ?

28
demandé sur Bug 2014-02-01 10:10:36

5 réponses

changez votre action pour être comme Post([FromBody]string schooltypeName) comme par défaut le type de chaîne de caractères est prévu pour venir Uri.

mise à Jour:

Changez votre corps en juste "Aided" comme actuellement, vous auriez besoin d'une classe pour faire de la deserialiation autrement ( ex:class School { public string SchoolTypeName { get; set; } }

42
répondu Kiran Challa 2014-02-01 06:42:24

voir le utiliser namespace en haut de la manette, si vous utilisez Système.Web.Mvc, alors, ce problème peut être produite:

Utilisation:

using System.Web.Http;
12
répondu Sohail xIN3N 2014-06-24 10:10:53

Le Problème se résume à ceci:

si vos routes en démarrage sont enregistrées avec routes.MapRoute( vous devez décorer votre post méthodes [System.Web.Mvc.HttpPost]

si vos routes en démarrage sont enregistrées avec Routes.MapHttpRoute( vous devez décorer votre post méthodes [System.Web.Http.HttpPost]

si vous utilisez MapRoute()[System.Web.Http.HttpPost] il l'habitude de travailler

si vous utilisez MapHttpRoute()[System.Web.Mvc.HttpPost] il l'habitude de travailler

6
répondu Gerrie Pretorius 2016-01-22 09:36:07

Pour les futurs lecteurs. J'ai trouvé cette question..mais trouvé (ma) réponse ailleurs.

j'ai décoré la méthode avec l'attribut vu ci-dessous.

    [System.Web.Http.HttpPost]
    public MyOutputObject DoSomething([FromBody]MyInputObject args)
    {
        Console.Writeline(args.ToString());
    }

mon code client (c#, console app) pour être complet.

    private static Task<MyOutputObject> MyClientCall(string baseAddress, MyInputObject args)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(baseAddress);
        client.DefaultRequestHeaders.Accept.Add(
           new MediaTypeWithQualityHeaderValue("application/json"));

           /* Your class name would be "MyEntityController" most likely */
        string serviceUrl = baseAddress + @"api/MyEntity/DoSomething";

        HttpResponseMessage response = client.PostAsJsonAsync(serviceUrl, args).Result;

        Console.WriteLine(response);
        Console.WriteLine(response.Content.ReadAsStringAsync().Result);

        if (!response.IsSuccessStatusCode)
        {
            Console.WriteLine("ERROR:  :(   " + response.ReasonPhrase);
            return null;
        }
        Task<MyOutputObject> wrap = response.Content.ReadAsAsync<MyOutputObject>();
        return wrap;
    }

j'ai trouvé ma réponse ici:

http://blog.dontpaniclabs.com/post/2013/01/23/That-Pesky-Requested-Resource-Does-Not-Support-HTTP-Method-POST-Error-When-Using-MVC-Web-API

5
répondu granadaCoder 2014-12-18 22:19:27

veuillez vérifier le nom de la méthode GET action que vous utilisez. Les Chances sont que vous pourriez être en utilisant les mêmes noms de Route pour obtenir la méthode et la méthode de poste et d'attendre le résultat.

Exemple :

nom du contrôleur : StudentController

    [Route("api/Student/names")]
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "student1", "student2" };
    }

Url (méthode GET): http://localhost:59342/api/student/names

     [HttpPost]
     [Route("api/Student/names")]
     public String Post(String name)
     {
         return "success";
     }

Pour la méthode POST à l'url : http://localhost:59342/api/student/names

alors vous obtiendrez l'erreur mentionnée ci-dessus

Solution: Changer le POST de l'action nom de la méthode, comme ci-dessous

    [HttpPost]
    [Route("api/Student/getName")]
    public String Post(String name)
    {
        return "success";
    }

Alors que l'url est utilisée pour obtenir la réponse pour la méthode post est :

http://localhost:59342/api/student/getName

0
répondu Thriveni 2018-07-18 05:41:41