Как да предавам параметри на методи за действие в ASP.NET Core MVC

ASP.NET Core е междуплатформена, отворена, бърза и модулна рамка за изграждане на високопроизводителни уеб приложения. Има редица начини, по които можете да предавате параметри на методи за действие в ASP.NET Core MVC. Можете да ги предадете чрез URL, низ за заявка, заглавка на заявка, тяло на заявка или дори формуляр. Тази статия разказва за всички тези начини и ги илюстрира с примери за кодове.

За да работите с примерите за кодове, предоставени в тази статия, трябва да имате Visual Studio 2019 инсталиран във вашата система. Ако все още нямате копие, можете да изтеглите Visual Studio 2019 тук. 

Създайте ASP.NET Core MVC проект в Visual Studio 2019

Първо, нека създадем проект ASP.NET Core в Visual Studio 2019. Ако приемем, че Visual Studio 2019 е инсталиран във вашата система, следвайте стъпките, описани по-долу, за да създадете нов ASP.NET Core проект в Visual Studio.

  1. Стартирайте Visual Studio IDE.
  2. Кликнете върху „Създаване на нов проект“.
  3. В прозореца „Създаване на нов проект“ изберете „ASP.NET Core Web Application“ от показания списък с шаблони.
  4. Щракнете върху Напред.
  5. В прозореца „Конфигуриране на вашия нов проект“ посочете името и местоположението на новия проект.
  6. По избор поставете отметка в квадратчето „Поставяне на решение и проект в една и съща директория“, в зависимост от вашите предпочитания.
  7. Щракнете върху Създаване.
  8. В прозореца „Създаване на ново уеб приложение на ASP.NET Core“, показан по-нататък, изберете .NET Core като време на изпълнение и ASP.NET Core 3.1 (или по-нова версия) от падащия списък в горната част.
  9. Изберете „Уеб приложение (Model-View-Controller)“ като шаблон на проекта, за да създадете ново приложение на ASP.NET Core MVC. 
  10. Уверете се, че квадратчетата „Активиране на поддръжката на Docker“ и „Конфигуриране за HTTPS“ са отметнати, тъй като тук няма да използваме тези функции.
  11. Уверете се, че удостоверяването е настроено на „Без удостоверяване“, тъй като и ние няма да използваме удостоверяване.
  12. Щракнете върху Създаване.

Следвайки тези стъпки трябва да създадете нов ASP.NET Core MVC проект в Visual Studio 2019. Ще използваме този проект в секциите по-долу, за да илюстрираме различните методи за предаване на параметри към методите за действие в ASP.NET Core 3.1.

Създайте клас AuthorRepository в ASP.NET Core MVC

В този пример ще използваме клас на хранилище - методите за действие в контролера ще взаимодействат с методите на класа на хранилището за CRUD операции. Първо ще създадем клас модел на име Автор с минимални свойства за простота, както е показано в кодовия фрагмент, даден по-долу.

    публична класа Автор

    {

        public int Id {get; комплект; }

        публичен низ FirstName {get; комплект; }

        публичен низ LastName {get; комплект; }

    }

Класът AuthorRepository съдържа методи за извличане на екземпляри на класа Author от общ списък, както и за добавяне на нови екземпляри на класа Author към общия списък. Методът GetAuthors връща страница с данни, като номерът на страницата му се предава като аргумент.

    публичен клас AuthorRepository

    {

        Автори на списъка = нов списък ()

        {

            нов автор

            {

                Id = 1,

                FirstName = "Joydip",

                LastName = "Kanjilal"

            },

            нов автор

            {

                Id = 2,

                FirstName = "Стив",

                LastName = "Смит"

            }

        };

        публичен автор GetAuthor (int id)

        {

            връщане на автори.FirstOrDefault (a => a.Id == id);

        }

        публичен списък GetAuthors (int pageNumber = 1)

        {

            int pageSize = 10;

            int skip = pageSize * (pageNumber - 1);

            ако (автори. брой <pageSize)

                pageSize = автори.Количество;

            връщане на автори

              .Скип (пропуск)

              .Take (pageSize) .ToList ();

        }

        public bool Save (Автор на автора)

        {

            var резултат = автори.Къде (a => a.Id == author.Id);

            ако (резултат! = нула)

            {

                if (result.Count () == 0)

                {

                    автори.Добави (автор);

                    връщане вярно;

                }

            }

            върнете false;

        }

    }

Предайте параметрите през URL адреса в ASP.NET Core MVC

Един от най-простите и лесни начини за предаване на параметри към метод на действие е предаването им чрез URL адреса. Следният кодов фрагмент илюстрира как можете да предавате параметри в URL адреса.

[HttpGet]

[Route („Default / GetAuthor / {authorId: int}“)]]

публичен IActionResult GetAuthor (int authorId)

{

   var data = authorRepository.GetAuthor (authorId);

   връщане Изглед (данни);

}

URL адресът до крайната точка е:

GET: // localhost: 8061 / По подразбиране / GetAuthor / 1

Предавайте параметри чрез низ за заявка в ASP.NET Core MVC

Предаването на параметри в низа на заявката е друга опция. Не изисква промяна на информацията за маршрута и следователно е обратно съвместима. Помислете за следния кодов фрагмент, който илюстрира как можете да предавате параметри чрез низове на заявки в метод за действие.

[HttpGet]

[Route („Default / GetAuthors / {pageNumber: int}“)]

публичен IActionResult GetAuthors ([FromQuery

(Name = "pageNumber")] int pageNumber = 1)

{

   var data = authorRepository.GetAuthors (pageNumber);

   връщане Ok (данни);

}

Ето URL адреса за достъп до тази крайна точка:

GET: // localhost: 8061 / Default / GetAuthors? PageNumber = 1

Методът GetAuthors приема номера на страницата като аргумент, изпратен до нея чрез низ за заявка. Обърнете внимание, че pageNumber е незадължителен параметър - ако към този метод не бъде предаден параметър, тогава номерът на страницата ще бъде интерпретиран като 1. Методът връща записите на автора за посочената страница. В нашия пример, ако в хранилището за данни има 100 авторски записа и номерът на страницата е 3, този метод ще върне записи от 31 до 40. (Имайте предвид, че броят на авторите на страница е кодиран твърдо; той е посочен като 10 в Клас AuthorRepository.)

Предаване на параметри чрез заглавка на заявка в ASP.NET Core MVC

Заглавката на заявката е още една опция за предаване на параметри към вашите методи за действие. Често срещан случай за това е предаването на идентификационни данни или други тайни данни по кабела. Следният кодов фрагмент илюстрира метод за действие, който приема номер на кредитна карта като параметър и връща true, ако номерът на кредитната карта е валиден.

[HttpGet]

[Маршрут („По подразбиране / IsCreditCardValid / {CreditCardNumber}“)]]

публичен IActionResult IsCreditCardValid ([FromHeader] низ CreditCardNumber)

{

   низ regexExpression =

   "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

   "(? 5 [1-5] [0-9] {14}) |" +

   "(? 3 [47] [0-9] {13}) |) $";

   Regex regex = нов Regex (regexExpression);

   var match = regex.Match (creditCardNumber);

   return Ok (match.Success);

}

За по-голяма простота методът на действие IsCreditCardValid валидира само кредитни карти Visa, MasterCard и Amex. Можете да разширите метода IsCreditCardValid, за да проверите други видове карти. Тъй като номерът на кредитната карта трябва да бъде предаден сигурно, използването на заглавката на заявката е добър избор тук. Фигура 1 показва как можете да посочите номера на кредитната си карта като параметър чрез заглавката на заявката.

Предавайте параметри чрез тялото на заявката в ASP.NET Core MVC

Често ще трябва да предавате параметри през тялото на заявката, когато извършвате операции за вмъкване или актуализиране. Следният кодов фрагмент илюстрира как можете да предадете екземпляр на класа на автора чрез тялото на заявката.

[HttpPost]

[Маршрут („По подразбиране / Вмъкване“)]

публично вмъкване на IActionResult ([FromBody] Автор на автора)

{

   връщане ОК (authorRepository.Save (автор));

}

Фигура 2 показва как можете да посочите данните, които да се вмъкват в тялото на заявката.

Пълен изходен код на нашия клас DefaultController

Пълният код на класа DefaultController е предоставен по-долу за справка.

 публичен клас DefaultController: Controller

    {

        частно само за четене AuthorRepository authorRepository =

        ново AuthorRepository ();

        [HttpGet]

        [Route („Default / GetAuthor / {authorId: int}“)]]

        публичен IActionResult GetAuthor (int authorId)

        {

            var data = authorRepository.GetAuthor (authorId);

            връщане Ok (данни);

        }

        [HttpGet]

        [Route („Default / GetAuthors / {pageNumber: int}“)]

        публичен IActionResult GetAuthors ([FromQuery

        (Name = "pageNumber")] int pageNumber = 1)

        {

            var data = authorRepository.GetAuthors (pageNumber);

            връщане Ok (данни);

        }

        [HttpGet]

        [Маршрут („По подразбиране / IsCreditCardValid / {CreditCardNumber}“)]]

        публичен IActionResult IsCreditCardValid

        ([FromHeader] низ CreditCardNumber)

        {

            низ regexExpression =

            "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

            "(? 5 [1-5] [0-9] {14}) |" +

            "(? 3 [47] [0-9] {13}) |) $";

            Regex regex = нов Regex (regexExpression);

            var match = regex.Match (creditCardNumber);

            return Ok (match.Success);

        }

        [HttpPost]

        [Маршрут („По подразбиране / Вмъкване“)]

        публично вмъкване на IActionResult ([FromBody] Автор на автора)

        {

            връщане ОК (authorRepository.Save (автор));

        }

    }

И накрая, можете също да предадете параметри чрез формуляр. Формуляр често се използва, когато искате да качите файл. В този случай ще трябва да се възползвате от интерфейса IFormFile. 

Как да направите повече в ASP.NET Core:

  • Как да използвам API анализатори в ASP.NET Core
  • Как да използваме маркери за данни за маршрути в ASP.NET Core
  • Как да използвам версирането на API в ASP.NET Core
  • Как да използвам обекти за прехвърляне на данни в ASP.NET Core 3.1
  • Как да се справя с 404 грешки в ASP.NET Core MVC
  • Как да използвам инжектиране на зависимост във филтри за действие в ASP.NET Core 3.1
  • Как да използвам шаблона за опции в ASP.NET Core
  • Как да използвам маршрутизиране на крайни точки в ASP.NET Core 3.0 MVC
  • Как да експортирам данни в Excel в ASP.NET Core 3.0
  • Как да използвам LoggerMessage в ASP.NET Core 3.0
  • Как да изпращате имейли в ASP.NET Core
  • Как да регистрирам данни в SQL Server в ASP.NET Core
  • Как да планирате работни места с помощта на Quartz.NET в ASP.NET Core
  • Как да върнете данни от ASP.NET Core Web API
  • Как да форматирате данните за отговор в ASP.NET Core
  • Как да консумирате ASP.NET Core Web API с помощта на RestSharp
  • Как да извършвате асинхронни операции с помощта на Dapper
  • Как да използваме флагове на функции в ASP.NET Core
  • Как да използвам атрибута FromServices в ASP.NET Core
  • Как да работите с бисквитки в ASP.NET Core
  • Как да работя със статични файлове в ASP.NET Core
  • Как да използвам URL пренаписване на Middleware в ASP.NET Core
  • Как да приложим ограничаване на скоростта в ASP.NET Core
  • Как да използвам Azure Application Insights в ASP.NET Core
  • Използване на разширени функции на NLog в ASP.NET Core
  • Как да се справим с грешки в ASP.NET Web API
  • Как да приложим обработка на глобални изключения в ASP.NET Core MVC
  • Как да се справя с нулеви стойности в ASP.NET Core MVC
  • Разширено създаване на версии в ASP.NET Core Web API
  • Как да работя с услуги за работници в ASP.NET Core
  • Как да използвам API за защита на данните в ASP.NET Core
  • Как да използвам условен мидълуер в ASP.NET Core
  • Как да работите със състоянието на сесията в ASP.NET Core
  • Как да пишете ефективни контролери в ASP.NET Core