Dodawanie kontrolera do aplikacji ASP.NET Core MVCAdd a controller to an ASP.NET Core MVC app

Przez Rick AndersonBy Rick Anderson

Wzorzec architektury Model-View-Controller (MVC) dzieli aplikację na trzy główne składniki: Modelu, Vidok, i Controller.The Model-View-Controller (MVC) architectural pattern separates an app into three main components: Model, View, and Controller. Wzorzec MVC pomaga w tworzeniu aplikacji, które są bardziej zakresie testować i łatwiejszy do aktualizacji niż tradycyjne aplikacje monolityczne.The MVC pattern helps you create apps that are more testable and easier to update than traditional monolithic apps. Aplikacje korzystające z platformy MVC zawiera:MVC-based apps contain:

  • Models: Klasy, które reprezentują dane aplikacji.Models: Classes that represent the data of the app. Klasy modeli Użyj logikę weryfikacji, aby wymuszać reguły biznesowe do tych danych.The model classes use validation logic to enforce business rules for that data. Zazwyczaj obiekty modelu pobierania i przechowywania stanu modelu w bazie danych.Typically, model objects retrieve and store model state in a database. W tym samouczku Movie model pobiera filmu dane z bazy danych, przekazuje go do widoku lub aktualizuje.In this tutorial, a Movie model retrieves movie data from a database, provides it to the view or updates it. Zaktualizowane dane są zapisywane do bazy danych.Updated data is written to a database.

  • Views: Widoki są składnikami aplikacji interfejsu użytkownika (UI).Views: Views are the components that display the app's user interface (UI). Ogólnie rzecz biorąc ten interfejs użytkownika Wyświetla określone dane modelu.Generally, this UI displays the model data.

  • Controllers: Klasy, które obsługują żądania przeglądarki.Controllers: Classes that handle browser requests. Pobierają dane z modelu i wywołać Przeglądanie szablonów, które zwracają odpowiedzi.They retrieve model data and call view templates that return a response. W aplikacji MVC widok zawiera tylko informacje; Kontroler obsługuje i reaguje na dane wejściowe użytkownika i interakcji.In an MVC app, the view only displays information; the controller handles and responds to user input and interaction. Przykładowo kontroler obsługuje wartości trasy danymi i ciągiem zapytania i przekazuje te wartości do modelu.For example, the controller handles route data and query-string values, and passes these values to the model. Model może ich użyć do wykonywania zapytań w bazie danych.The model might use these values to query the database. Na przykład https://localhost:1234/Home/About ma dane trasy Home (kontroler) i About (metoda akcji do wywołania na głównym kontrolerze).For example, https://localhost:1234/Home/About has route data of Home (the controller) and About (the action method to call on the home controller). https://localhost:1234/Movies/Edit/5 to żądanie Edytuj film o identyfikatorze = 5 za pomocą kontrolera filmu.https://localhost:1234/Movies/Edit/5 is a request to edit the movie with ID=5 using the movie controller. Dane trasy zostało wyjaśnione w dalszej części tego samouczka.Route data is explained later in the tutorial.

Wzorzec MVC pomaga w tworzeniu aplikacji, których różnych aspektów aplikacji (logika danych wejściowych, logika biznesowa i logika interfejsu użytkownika), zapewniając tym luźne powiązanie tych elementów.The MVC pattern helps you create apps that separate the different aspects of the app (input logic, business logic, and UI logic), while providing a loose coupling between these elements. Wzorzec Określa, gdzie każdy rodzaj logiki powinien znajdować się w aplikacji.The pattern specifies where each kind of logic should be located in the app. Logika interfejsu użytkownika, należy w widoku.The UI logic belongs in the view. Logika danych wejściowych jest powiązana z kontrolerem.Input logic belongs in the controller. Logika biznesowa jest powiązana w modelu.Business logic belongs in the model. Ta separacja ułatwia zarządzanie złożonością podczas tworzenia aplikacji, ponieważ umożliwia pracę na jednym aspekcie implementacji w danym momencie, bez wywierania wpływu na kod innego.This separation helps you manage complexity when you build an app, because it enables you to work on one aspect of the implementation at a time without impacting the code of another. Na przykład można pracować nad kodem widoku bez zależności od kodu logiki biznesowej.For example, you can work on the view code without depending on the business logic code.

Firma Microsoft obejmuje te pojęcia w tej serii samouczków i pokazują, jak ich używać do tworzenia aplikacji filmu.We cover these concepts in this tutorial series and show you how to use them to build a movie app. Projektu MVC zawiera foldery dla kontrolerów i widoków.The MVC project contains folders for the Controllers and Views.

Dodawanie kontroleraAdd a controller

  • W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy kontrolerów > Dodaj > kontrolera menu kontekstoweIn Solution Explorer, right-click Controllers > Add > Controller Contextual menu

  • W Dodawanie szkieletu okno dialogowe, wybierz opcję kontroler MVC — pustyIn the Add Scaffold dialog box, select MVC Controller - Empty

    Dodaj kontroler MVC i nadaj mu nazwę

  • W okna dialogowego Dodaj pusty kontroler MVC, wprowadź HelloWorldController i wybierz Dodaj.In the Add Empty MVC Controller dialog, enter HelloWorldController and select ADD.

Zastąp zawartość Controllers/HelloWorldController.cs następującym kodem:Replace the contents of Controllers/HelloWorldController.cs with the following:

using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // 
        // GET: /HelloWorld/

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}

Każdy public metody w kontrolerze jest wywoływany jako punktu końcowego HTTP.Every public method in a controller is callable as an HTTP endpoint. W powyższym przykładzie obu tych metod zwraca ciąg.In the sample above, both methods return a string. Należy pamiętać, komentarze poprzedzających każdej metody.Note the comments preceding each method.

Punkt końcowy HTTP jest targetable adres URL aplikacji sieci web, takich jak https://localhost:5001/HelloWorldi łączy protokół używany: HTTPS, lokalizacji sieciowej serwera sieci web (w tym z portem TCP): localhost:5001 i docelowy identyfikator URI HelloWorld.An HTTP endpoint is a targetable URL in the web application, such as https://localhost:5001/HelloWorld, and combines the protocol used: HTTPS, the network location of the web server (including the TCP port): localhost:5001 and the target URI HelloWorld.

Pierwszy komentarz stany to HTTP GET metodę, która jest wywoływana przez dołączenie /HelloWorld/ do podstawowego adresu URL.The first comment states this is an HTTP GET method that's invoked by appending /HelloWorld/ to the base URL. Określa drugi komentarz HTTP GET metodę, która jest wywoływana przez dołączenie /HelloWorld/Welcome/ do adresu URL.The second comment specifies an HTTP GET method that's invoked by appending /HelloWorld/Welcome/ to the URL. Później w samouczku silnika tworzenia szkieletów służy do generowania HTTP POST metod, które aktualizacji danych.Later on in the tutorial the scaffolding engine is used to generate HTTP POST methods which update data.

Uruchom aplikację w trybie bez debugowania i Dołącz "nazwę HelloWorld" w ścieżce w pasku adresu.Run the app in non-debug mode and append "HelloWorld" to the path in the address bar. Index Metoda zwraca ciąg.The Index method returns a string.

Okno przeglądarki, wyświetlanie odpowiedzi aplikacji, to jest Moja Akcja domyślna

MVC wywołuje klasy kontrolera (i metod akcji w nich), w zależności od przychodzącego adresu URL.MVC invokes controller classes (and the action methods within them) depending on the incoming URL. Wartość domyślna logikę routingu adresów URL używany przez MVC używa formatu to w celu określenia, jakie kodu do wywołania:The default URL routing logic used by MVC uses a format like this to determine what code to invoke:

/[Controller]/[ActionName]/[Parameters]

Ustawiono formatu routingu Configure method in Class metoda Startup.cs pliku.The routing format is set in the Configure method in Startup.cs file.

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Podczas przechodzenia do aplikacji, a nie podasz żadnych segmentów adresu URL, jego wartość domyślna to kontroler "Home", a metoda "Index" określona w wiersza szablonu wyróżnione powyżej.When you browse to the app and don't supply any URL segments, it defaults to the "Home" controller and the "Index" method specified in the template line highlighted above.

Pierwszy segment adresu URL określa klasę kontrolera do uruchomienia.The first URL segment determines the controller class to run. Dlatego localhost:xxxx/HelloWorld mapuje HelloWorldController klasy.So localhost:xxxx/HelloWorld maps to the HelloWorldController class. Druga część segment adresu URL określa metody akcji w klasie.The second part of the URL segment determines the action method on the class. Dlatego localhost:xxxx/HelloWorld/Index spowodowałoby Index metody HelloWorldController klasy do uruchomienia.So localhost:xxxx/HelloWorld/Index would cause the Index method of the HelloWorldController class to run. Należy zauważyć, że masz aby przejść do localhost:xxxx/HelloWorld i Index wywołano metodę domyślnie.Notice that you only had to browse to localhost:xxxx/HelloWorld and the Index method was called by default. Jest to spowodowane Index jest domyślną metodą, która zostanie wywołana na kontrolerze, jeśli nazwa metody nie jest jawnie określona.This is because Index is the default method that will be called on a controller if a method name isn't explicitly specified. Trzecia część segment adresu URL ( id) dla danych trasy.The third part of the URL segment ( id) is for route data. Dane trasy zostało wyjaśnione w dalszej części tego samouczka.Route data is explained later in the tutorial.

Przejdź do https://localhost:xxxx/HelloWorld/Welcome.Browse to https://localhost:xxxx/HelloWorld/Welcome. Welcome Metoda uruchamia i zwraca ciąg This is the Welcome action method....The Welcome method runs and returns the string This is the Welcome action method.... Dla tego adresu URL jest kontroler HelloWorld i Welcome jest metodą akcji.For this URL, the controller is HelloWorld and Welcome is the action method. Pierwszy raz używasz [Parameters] wchodzi w skład jeszcze adresu URL.You haven't used the [Parameters] part of the URL yet.

Okno przeglądarki, wyświetlanie odpowiedzi aplikacji, to jest metoda akcji-Zapraszamy!

Zmodyfikuj kod, aby przekazać niektóre informacje o parametrach z adresu URL do kontrolera.Modify the code to pass some parameter information from the URL to the controller. Na przykład /HelloWorld/Welcome?name=Rick&numtimes=4.For example, /HelloWorld/Welcome?name=Rick&numtimes=4. Zmiana Welcome metodę, aby uwzględnić dwa parametry, jak pokazano w poniższym kodzie.Change the Welcome method to include two parameters as shown in the following code.

// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Powyższy kod:The preceding code:

  • Używa funkcji opcjonalny parametr języka C# w celu wskazania, że numTimes parametru wartość domyślna to 1, jeśli nie przekazano żadnej wartości tego parametru.Uses the C# optional-parameter feature to indicate that the numTimes parameter defaults to 1 if no value is passed for that parameter.
  • Używa HtmlEncoder.Default.Encode chronić aplikację przed złośliwe dane wejściowe (to znaczy JavaScript).Uses HtmlEncoder.Default.Encode to protect the app from malicious input (namely JavaScript).
  • Używa ciągi interpolowane w $"Hello {name}, NumTimes is: {numTimes}".Uses Interpolated Strings in $"Hello {name}, NumTimes is: {numTimes}".

Uruchom aplikację i przejdź do:Run the app and browse to:

https://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4

(Zamiast xxxx numeru portu). Możesz spróbować różne wartości name i numtimes w adresie URL.(Replace xxxx with your port number.) You can try different values for name and numtimes in the URL. MVC wiązanie modelu system automatycznie mapuje parametry nazwane z ciągu zapytania w pasku adresu do parametrów w metodzie.The MVC model binding system automatically maps the named parameters from the query string in the address bar to parameters in your method. Zobacz powiązań modelu Aby uzyskać więcej informacji.See Model Binding for more information.

Wyświetlanie odpowiedzi aplikacji Hello Rick jest NumTimes okna przeglądarki: 4

Na ilustracji powyżej segment adresu URL (Parameters) nie jest używany, name i numTimes parametry są przekazywane jako ciągów zapytania.In the image above, the URL segment (Parameters) isn't used, the name and numTimes parameters are passed as query strings. ? (Znak zapytania) w powyższym adresie URL jest separatorem, a następnie wykonaj ciągi zapytań.The ? (question mark) in the above URL is a separator, and the query strings follow. & Rozdziela ciągi zapytań.The & character separates query strings.

Zastąp Welcome metoda następującym kodem:Replace the Welcome method with the following code:

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Uruchom aplikację, a następnie wprowadź następujący adres URL: https://localhost:xxx/HelloWorld/Welcome/3?name=RickRun the app and enter the following URL: https://localhost:xxx/HelloWorld/Welcome/3?name=Rick

Tym razem trzeci segment adresu URL dopasowane parametru trasy id.This time the third URL segment matched the route parameter id. Welcome Metody zawiera parametr id pasujących szablon adresu URL w MapRoute metody.The Welcome method contains a parameter id that matched the URL template in the MapRoute method. Końcowe ? (w id?) wskazuje id parametr jest opcjonalny.The trailing ? (in id?) indicates the id parameter is optional.

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

W tych przykładach kontrolera została wykonując "VC" część MVC — widok i kontroler pracy.In these examples the controller has been doing the "VC" portion of MVC - that is, the view and controller work. Kontroler zwraca HTML bezpośrednio.The controller is returning HTML directly. Ogólnie nie ma kontrolerów bezpośrednio, zwracając HTML, ponieważ staje się bardzo skomplikowane, kodu i obsługa.Generally you don't want controllers returning HTML directly, since that becomes very cumbersome to code and maintain. Zamiast tego używa się zazwyczaj oddzielny plik szablonu widoku Razor ułatwiający Generowanie odpowiedzi HTML.Instead you typically use a separate Razor view template file to help generate the HTML response. Można to zrobić w następnym samouczku.You do that in the next tutorial.