.NetCore 3.1 Webapi не отправляет строку в действии - PullRequest
1 голос
/ 11 июля 2020

Я обновил решение webapi с 2.1 до 3.1.

Мой файл Startup.cs содержит:

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers();
   services.AddMvc().AddNewtonsoftJson();
..

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   if (env.IsDevelopment())
   {
       app.UseDeveloperExceptionPage();
   }

   app.UseRouting();
   app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
..

Мой контроллер начинается с:

[ApiController]
[Route("api/[controller]/[action]")]
public class MyFooController : Controller

и вот мое действие:

[HttpPost]
public string MyFooAction(string value)

Итак, я вызываю действие из другого простого решения:

var param = new NameValueCollection();
param["value"] = "3";
using (var client = new WebClient())
{
    var data = client.UploadValues(url, "POST", param);

При отладке вызов получает маршрут действия, но всегда значение = null. Я также пробовал с [FromBody], но это то же самое.

Я читал в 3.1, я бы предпочел наследовать контроллер от класса ControllerBase, но у меня есть много действий, которые возвращают Json (obj), а этого нет в ControllerBase class, но только в классе Contreller: это проблема?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 июля 2020

var data = client.UploadValues ​​(url, "POST", param);

вызов получает маршрут действия, но всегда value = null

Используя метод WebClient.UploadValues для отправки значений на сервер, вы можете попробовать применить атрибут [FromForm] к параметру действия, как показано ниже.

[HttpPost]
public string MyFooAction([FromForm]string value)
{

    //...

Результат теста

enter image description here

Besides, you can achieve same requirement using WebClient.UploadString method to post data through request body.

using (var client = new WebClient())
{
    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
    var data = client.UploadString(url, "POST", "3");
    //...
}

Action method

[HttpPost]
public string MyFooAction([FromBody]string value)
{

    //...

Test Result

введите описание изображения здесь

...