Свойства с другими именами, равными NULL, при публикации в MVC Controller, но не в WebApi Controller - PullRequest
1 голос
/ 11 июня 2019

У меня есть модель под названием Покупка с различными свойствами:

public class Purchase
{
    [JsonProperty(PropertyName = "amount", NullValueHandling = NullValueHandling.Ignore)]
    public int Amount
    {
        get;
        set;
    }

    [JsonProperty(PropertyName = "currency_code", NullValueHandling = NullValueHandling.Ignore)]
    public string CurrencyCode
    {
        get;
        set;
    }
}

JSON:

{
  amount: 3000,
  currency_code: "USD"
}

Контроллер:

[AllowAnonymous]
public class ProtoController : Controller
{
    private readonly IPurchaseManagerFactorySelector purchaseManagerFactorySelector = null;

    public ProtoController(IPurchaseManagerFactorySelector purchaseManagerFactorySelector)
    {
        this.purchaseManagerFactorySelector = purchaseManagerFactorySelector;
    }

    [Route("opt/proto/index/{identifier}")]
    [HttpGet]
    public async Task<ActionResult> Index(string identifier)
    {
        return View();
    }

    [Route("opt/proto/index/{identifier}")]
    [HttpPost]
    public async Task<ActionResult> Index(string identifier, Request.Purchase purchase)
    {
        IPurchaseManager purchaseManager = purchaseManagerFactorySelector.GetFactory(identifier);

        return View();
    }
}

КогдаJSON публикуется в ApiController, все свойства заполняются правильно, однако, когда тот же JSON публикуется в контроллере, заполняется только сумма - CurrencyCode имеет значение null.Я кратко добавил новое свойство с именем Currency_Code, которое было заполнено, похоже, что атрибут JsonProperty игнорируется в MVC?Я добавил атрибут DataMember, однако это не имело никакого эффекта, поэтому я удалил его.Используется Json.Net, но я не понимаю, в чем разница?

1 Ответ

0 голосов
/ 11 июня 2019

Я бы удалил Request.Purchase из аргументов и попробовал бы атрибут [FromBody] для привязки параметров.

Если все, что вы изменяете, это наследование Controller от Controller к ApiController, чем я неконечно, но это звучит как заголовки ваших сообщений.

Если вы делаете вызов в Chrome и используете инструменты проверки, вы сможете проверять заголовки при каждом совершаемом вами вызове и видеть, что заполняется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...