Asp. Net WebApi работает с GET, но не с POST - PullRequest
0 голосов
/ 11 февраля 2020

Я использую Asp. Net веб-формы с WebAPI 2. У меня есть метод, который работает с GET, но когда я использую POST, он не работает. Если вы видите ниже, внутри этого метода есть точка останова, и он даже не достигает ее при вызове POST. Странно, когда я использую Postman для тестирования метода, тогда он работает с POST. Что я делаю не так?

Мой jquery код

$.ajax({
   url: 'MyController/GetUserDetail',
   type: 'POST',
   async: true,
   dataType: 'json',
   data:
   {
      "search": myvariable
   },
    success: function (response) {
   }
});

Мой метод Web API. При использовании [HttpGet], а также при изменении jquery с POST на GET, это работает. Но для POST этот метод никогда не вызывается, так как точка останова никогда не срабатывает, и я тоже не получаю никакой ошибки.

[HttpPost]
public User GetUserDetail(string search)
{      //breakpoint here
}

My config config

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

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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

с параметром поиска строки вы не указали [FromBody] или [FromUri], поэтому его значение по умолчанию принимается как fromUri для параметров типа строки. и вы передаете параметр в теле. Итак, попробуйте отправить параметр в виде строки запроса ...

0 голосов
/ 11 февраля 2020

Похоже на проблему с CORS. Чтобы обработать CORS для Web API, добавьте ниже параметры в файле web.config Web API внутри section:

<httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
</httpProtocol>

Но при включении CORS существует угроза безопасности. Хорошее объяснение: здесь .

Необходимо внести еще одно изменение в JavaScript. Существует странная проблема с параметром ' data ' $. ajax (), поэтому вам необходимо встроить значение параметра в ' url ' в виде строки запроса:

url: 'MyController/GetUserDetail?search=' + myvariable,
...