Я новичок в 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. Кажется, я не понимаю, что здесь происходит не так.
3 ответа
Попробуйте отправить POST-запрос таким образом.
curl -d '{json}' -H 'Content-Type: application/json' https://example.com/login
Во-первых, вы должны использовать тег [Route("api/[controller]/[action]")] для вашего класса контроллера, чтобы направить URL-адрес в этот блок вашего кода.
[Route("api/[controller]/[action]")]
public class HomeController : Controller
{
...
Во-вторых, вы новичок в asp, я предлагаю вам использовать Swagger для создания лучшего пользовательского интерфейса и помочь вам отправить HTTP-запрос в правильном формате в веб-приложение, для добавления swagger в ваш проект следуйте ниже:
Попробуйте использовать тип контента /x-www-form-urlencoded
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'id=123456789' \
--data-urlencode 'name=John Smith'
Если он все еще не работает, добавьте атрибут [FromForm]. Если вы хотите использовать json для mvc5, вам придется написать тонны кода, чтобы сделать специальный дескриптор.
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
JSON
, когда отправляете его через почтальона?