MVC 5, генериране на отговор от контролери

ASP.NET --- ASP.NET MVC 5 --- Генериране на отговор от контролери

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

Същият подход може да се приложи, ако контролерът наследява от класа Controller. Класът HttpResponseBase, който се връща при четене на свойството requestContext.HttpContext.Response в метода Execute (), е достъпно чрез свойството Controller.Response, както е показано в примера по-долу, който предоставя разширения за класа DerivedController, също създаден по-рано чрез наследяване от клас Controller:

Методът ProduceOutput () използва стойността на свойството Server.MachineName, за да реши кой отговор да изпрати на клиента. („ProfessorWeb“ е името на моята машина за разработка.)

Докато този подход за генериране на отговор на потребителя работи, има няколко проблема с него:

Класовете на контролера трябва да съдържат информация за структурата на HTML или URL адреса, което прави класовете трудни за четене и поддръжка.

Контролер, който генерира отговор директно на изхода, е труден за единично тестване. Ще трябва да създадете фиктивни реализации на обекта Response и след това да можете да обработите изхода от контролера, за да определите какво представлява. Това може да означава, например, необходимостта да се приложи синтактичен анализ на HTML маркиране по ключови думи, което е дълъг и досаден процес.

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

За щастие MVC Framework има удобен инструмент, който решава всички тези проблеми - резултати от действията. Следващите раздели обясняват концепцията за резултатите от действията и ви показват различни начини да я използвате за генериране на отговори от контролери.

Резултати от действията

Резултатите от действията в MVC Framework се използват за отделяне на изявленията за намерение от изпълнението на намерението (извинете за тавтологията). Концепцията ще изглежда проста, след като се почувствате комфортно с нея, но отнема известно време, за да я разберете поради известна степен на непрякост.

Вместо да се занимават директно с обекта Response, методите на действие връщат обект от клас, получен от ActionResult, което описва какъв трябва да бъде отговорът от контролера - например, изобразяване на изглед или пренасочване към различен URL или метод на действие. Въпреки това (това е същото косвено) отговорът не се генерира директно. Вместо това се създава ActionResult обект, който MVC Framework обработва, за да получи резултата след извикването на метода на действие.

Системата за резултат на действие е пример за модела за проектиране на Command. Този шаблон представлява сценарии, в които съхранявате и предавате обекти, описващи операциите, които трябва да бъдат извършени.