#

 

Wie kann man Parameter in einer Webadresse handhaben?

Wenn man zum Beispiel die Adresse http://meineDomain.de/Produkte/Smartphones/1000

 

Man kann jede MVC Action mit einem optionalen Parameter versehen.

Beispiel Edit(int ID)

In dem MVC Controller ProductsController

Dadurch kann man http-Query Parameter übergeben wie /Products/Edit/555 oder ?ID=555

        public IActionResult Edit(int ID)

        {

            //*path: /edit/1

            return Content("id=" + 1);

        }

 

Dadurch kann man im Browser eingeben

/Products/Edit/1 oder ?ID=1

 

Unter Visual Studio im ProductsController

 

Router:

Damit der Parameter ID eingegeben werden kann wie /1234 ohne namentliche Benennung wie ?ID=1234 muss in Startup.cs der Router eingestellt werden.

Hier muss routes.MapRoute diese Variante als Muster eingetragen haben.

 

Die Parameter von Controller Actions werden in der startup definiert und sind meitens mit {id?} optional vorgegeben. Das heißt, mann kann eine ID oder Nummer übergeben, muss aber nicht.

Wie hier in der Startup.cs:

app.UseMvc(routes =>

            {

                routes.MapRoute(

                    name: "default",

                    template: "{controller=Home}/{action=Index}/{id?}");

            });

 

 

 

 

Optionale Parameter in Action

 

Wie kann man einer Action Parameter übergeben, sodass man im Browser in der URL Parameter als Query anfügen kann

Man kann jede Action mit zusätzlich optionalen Parametern versehen.

Dabei müssen die Parameter Nullable sein, das heißt, dass int mit int? definiert wird und string Parameter können von sich aus null sein.

Der Standardparameter ist meistens ID, und dieser wird im Router in der startup definiert in asp.net core

 

Beispiel http://localhost:61428/products/

 

        public IActionResult Index(int? GroupID,string sortBy)

        {

            //* int? = nullable

            if (GroupID.HasValue==false ) GroupID = 1;

            if (string.IsNullOrWhiteSpace(sortBy)) sortBy = "Name";

 

            return Content("GroupID=" + GroupID + " sortBy=" + sortBy );

        }

 

 

Eingabe im Browser ohne Parameter

http://localhost:61428/products/

Ergibt in der Action als Parameter

GroupID ist null und wird zu 1

sortBy ist leer und wird zu Name

 

Eingabe im Browser mit einem Parameter

http://localhost:61428/products?GroupID=2

ergeben in der Action als Parameter:

GroupID=2 und sortBy ist leer und wird Name

 

 

Eingabe im Browser mit beiden Parameter:

http://localhost:61428/products?GroupID=2&sortby=Price

als Parameter in der Action

GroupID=2 und sortBy="Price"

 

 

 

 

 

            app.UseMvc(routes =>

            {

                //*name-template-default

                routes.MapRoute(

                    "products_by_manufacturer_productgroup",

                    "products/manufacturer/{manufacturer}/{productgroup}",

                    new {controller="Products",action="byManufacturer_productgroup"}

                    );

 

            });

 

 

Browsereingabe

http://localhost:61428/products/manufacturer/microsoft/tablets

 

Mobile

.