действие контроллера ядра .net со многими параметрами - PullRequest
0 голосов
/ 06 января 2019

У меня есть действие API, которое требует 30 параметров. Проблема в том, что когда я добавляю это действие в класс контроллера, я сталкиваюсь с OverflowException.

[Route("api/getutilityservicebillcollection/{usba}/{usbt}/{usbpm}/{serviceUserID}" +
           "/{servicePassword}/{transactionSourceName}/{transactionSourceId}/{requestDateTime}" +
           "/{requestId}/{billNumber}/{billAccountNumber}/{billMobileNumber}/{billMonth}/{billYear}" +
           "/{billZone}/{billCategory}/{billStudentId}/{CustomerId}/{TransactionSerialNo}" +
           "/{BillToMonth}/{BillToYear}/{FromBillMonth}/{FromBillYear}/{studentBillPaymentType}" +
           "/{billPaymentAmount}/{paymentBranchId}/{paymentAccountNumber}/{exchangeCode}"+
           "/{lastPaymentDate}/{branchCode}")]
    public async Task<ActionResult> GetUtilityServiceBillCollection(string usba,
        string usbt, string usbpm, string serviceUserID,
        string servicePassword, string transactionSourceName, string transactionSourceId, string requestDateTime,
        string requestId, string billNumber, string billAccountNumber, string billMobileNumber, string billMonth,
        string billYear, string billZone, string billCategory, string billStudentId, string CustomerId,
        string TransactionSerialNo, string BillToMonth, string BillToYear, string FromBillMonth,
        string FromBillYear, string studentBillPaymentType, string billPaymentAmount, string paymentBranchId,
        string paymentAccountNumber, string exchangeCode, string lastPaymentDate, string branchCode)
    {
        UtilityServiceBillResponse s = await Iutility.UtilityServiceBillCollection(usba,usbt,usbpm,serviceUserID,
            servicePassword,transactionSourceName,transactionSourceId,requestDateTime,requestId,billNumber,
            billAccountNumber,billMobileNumber,billMonth,billYear,billZone,billCategory,billStudentId,CustomerId,
            TransactionSerialNo,BillToMonth,BillToYear,FromBillMonth,FromBillYear, studentBillPaymentType,
            billPaymentAmount, paymentBranchId, paymentAccountNumber, exchangeCode, lastPaymentDate,
            branchCode);

        if (s == null) return NotFound();
        else return Ok(s);

    }

В чем здесь проблема?

Кроме того, как я могу проверить это действие? Является ли ввод всех параметров в URL единственным вариантом?

1 Ответ

0 голосов
/ 06 января 2019

Вместо объявления такого API, используйте атрибуты, чтобы гарантировать, что маршрутизация для API выполнена правильно. Давайте добавим новый атрибут, чтобы явно определить его как POST-запрос

        [HttpPost]
        public ActionResult UtilityServiceBills([FromBody]UtilityServiceBillFilterViewModel vm)
        {
            // Do something to vm

            return Ok();
        }

А вот ViewModel

public class UtilityServiceBillFilterViewModel
    {
        [Required]
        public string Usbt { get; set; }

        [Required]
        public long BillNumber { get; set; }

        public string transactionSourceName { get; set; }

    }

Убедитесь, что вы отправили полезную нагрузку следующим образом:

{
  "usbt": "asdasd",
  "transactionSourceName": "asdasdasdasd",
  "billNumber": 123123123
}

.NET Core достаточно умен, чтобы преобразовать объект JSON в указанный класс. Если вы хотите узнать больше о разнице между POST API на основе [FromBody] и не на основе [FromBody], проверьте это

...