Я новичок в ASP.NET MVC. Я создал базовый класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyPluginProject.Models;

namespace MyPluginProject.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }
        
        [HttpPost]
        public JsonResult data(TestRequestObject testRequestObject)
        {
            TestResponseObject respobj = new TestResponseObject();
            
            respobj.id = testRequestObject.Id;
            respobj.name = testRequestObject.Name;
            
            //return Newtonsoft.Json.JsonConvert.SerializeObject(respobj);
            return Json(respobj);
        }
    }
}

И TestRequestObject POCO выглядит так:

 public class TestRequestObject
 {
     public string Id { get; set; }
     public string Name { get; set; }
     public string Address { get; set; }
 }

Конфигурация маршрута:

public class RouteConfig
{
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
}

Однако, когда я запускаю это локально и отправляю запрос от почтальона с

curl --location --request POST 'http://localhost:50132/home/data' \
--header 'Content-Type: application/json' \
--data-raw '{   
"id": "123456789",
"name": "John Smith",
"address":"ftyrhrrhrhhr"
}'

Значение не привязывается к TestRequestObject. Я пробовал [FromBody], однако, похоже, это разрешено только для .NET Core. Кажется, я не понимаю, что здесь происходит не так.

0
sand87 4 Фев 2022 в 07:22
 – 
Yong Shun
4 Фев 2022 в 07:44
Мне кажется, это нормально, как вы определяете свой JSON, когда отправляете его через почтальона?
 – 
Rahul Sharma
4 Фев 2022 в 07:46
Команда curl, которую я опубликовал, такая же, как я отправляю json от своего почтальона.
 – 
sand87
4 Фев 2022 в 08:03

3 ответа

Попробуйте отправить POST-запрос таким образом.

curl -d '{json}' -H 'Content-Type: application/json' https://example.com/login

0
Rajesh 4 Фев 2022 в 11:36

Во-первых, вы должны использовать тег [Route("api/[controller]/[action]")] для вашего класса контроллера, чтобы направить URL-адрес в этот блок вашего кода.

    [Route("api/[controller]/[action]")]
    public class HomeController : Controller
    { 
     ...

Во-вторых, вы новичок в asp, я предлагаю вам использовать Swagger для создания лучшего пользовательского интерфейса и помочь вам отправить HTTP-запрос в правильном формате в веб-приложение, для добавления swagger в ваш проект следуйте ниже:

введите описание ссылки здесь

0
Fazel Saeedi 4 Фев 2022 в 13:22

Попробуйте использовать тип контента /x-www-form-urlencoded

--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'id=123456789' \
--data-urlencode 'name=John Smith'

Если он все еще не работает, добавьте атрибут [FromForm]. Если вы хотите использовать json для mvc5, вам придется написать тонны кода, чтобы сделать специальный дескриптор.

0
Serge 4 Фев 2022 в 15:36