myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » Wie kann ich im ASP.NET eigene Urls für bestimmte Aktionen festlegen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich im ASP.NET eigene Urls für bestimmte Aktionen festlegen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)


BierDav ist offline

Wie kann ich im ASP.NET eigene Urls für bestimmte Aktionen festlegen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich möchte gerne in meiner ASP.Net Webanwendung (habe Leer ausgewählt) für jede Methode einen eigen Url definieren. Ich hab mich schon informiert aber alle arbeiten mit MVC und jetzt wüsste ich gern wie das auch normal geht. Bzw. Mein Ziel ist das wenn ich "http://.../Api/<Methodenname>" aufrufe ich nur die eine Methode ansprechen könnte.

Das wäre in meiner Startupdatei die ConfigureMetode wo bei ich statt <Methode> den Namen meiner Methode eingesetzt habe.

C#-Code:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc(routes =>
            {
                routes.MapRoute("default", "{Controller}/GetUser", new { controller = "Api", action = "<Methode>" });
            });

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("MVC didn't find anything!");
            });
}

Und in meiner ApiController Klasse:

C#-Code:
[Route("[controller]")]
public class ApiController : ControllerBase
{
        [HttpGet]
        [Produces("application/json")]
        [ActionName("<Methodenname>")]
        [Route("[Controller]/<Methodenname>")]
        public IActionResult <Methodenname>([FromBody]Value value)
        {
            //...
        }
}

Ich hoffe das ich mein Problem verständlich vormuliert habe.
Und bedanke mich schon im voraus für eine Anwort. :)

LG BierDav

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BierDav am 05.06.2019 15:46.

04.06.2019 20:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

willst du eine WebAPI machen? So wie hier?  Tutorial: Create a web API with ASP.NET Core MVC

Gruss

Coffeebean
04.06.2019 21:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja genau!
Nur (anhand des Bespiels) möchte ich dann api/PostTodo aufrufen und nicht api/Todo/...

LG BierDav
05.06.2019 15:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.175
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

/posttodo ist aber falsch, wenn Du korrekt REST machen willst.

Siehe  Regeln zu REST.

Aber wie man die URLs definiert, das steht auch in der Doku.
Keine Lust diese zu lesen?
05.06.2019 15:38 Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dort steht wie man URLs definiert aber nicht wie man sie für eine bestimmte Action vergiebt. Und du hast Recht ich hab mich vertan ich Meinte api/todo/PostTodo (Mein Fehler)

LG BierDav
05.06.2019 15:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

"PostTodo" ist hier nicht richtig. Schau dir REST an. POST ist ein Verb. Man schickt einen POST Request an "/api/todo". Daraus ergibt sich ja, was man tun will.

Wie man die URLs vergibt steht ebenfalls in der Doku. Wie gesagt, ich glaube dir sind die Verben, die mit [HttpPost] etc angegeben werden, nicht klar.

Schau dir REST an, ich denke dann wird es klarer.

Ich vermute gerade, dass du im StartUp.cs schon Routen mappen willst. Das brauchst du nicht, das machst du bei einer WebAPI für die APIController im Controller selber.

Gruss

Coffeebean
05.06.2019 15:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe es gelesen aber mein Problem ist das ich in einem Controller mehrere Get und Post Metoden habe und diesen einen eigenen Url wegen der verwechslungs Gefahr deklarieren möchte
05.06.2019 15:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

Ahhh, daher weht der Wind :)

Hast du Beispiele? Was hast du konkret vor? Wozu brauchst du verschiedene GETs oder POSTs in einem Controller?

Gruss

Coffeebean
05.06.2019 16:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja.
Ich habe in meinem Projekt eine Benutzer Verwaltung und da habe ich get-methoden wo ich die Details oder nur die User ID oder Username zurück gebe. Aber z.b. bei Details und User ID habe ich die selbe [frombody] Klasse und dies möchte ich auch beibehalten.

LG BierDav
05.06.2019 16:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

[FromBody] serialisiert deinen Request-Body bei einem entsprechendem Request. Du kannst die Klasse durchaus beibehalten und wiederverwenden.

Wenn du an einen Controller etwas POSTest, trägst du etwas neues ein. Da du noch nichts konkretes gezeigt hast, eventuell einen User.

Was die GET Request mit dem [FromBody] zu tun haben ist mir noch nicht klar. Kannst du konkreter werden? Hast du Code?

Gruss

Coffeebean
05.06.2019 17:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Den Code möchte ich nicht preisgeben aber ich habe eine Objekt Klasse (in dem Beispiel unten User)in der habe ich Username und Passwort und bei beiden Methoden steht sowas:

C#-Code:
[HttpGet]
public IActionResult <Metodenname>([FromBody]User user)

Hierbei gibt es keine eindeutige Möglichkeit zwei dieser Methoden (außer dem namen) auseinander zu kennen.

LG BierDav

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von BierDav am 05.06.2019 17:17.

05.06.2019 17:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

wieso nicht? Du kannst das Routing Attribut auch auf die Methode hängen.

C#-Code:
// GET: api/todo
[HttpGet]
public async Task<ActionResult<TodoItem[]>> GetTodoItems()
{
    // ...
}

// GET: api/Todo/getwhateveritems
[HttpGet]
[Route("getwhateveritems")]
public async Task<ActionResult<TodoItem>> MySuperMethodName()
{
    // ...
}

oder alternativ

C#-Code:
// GET: api/Todo/getwhateveritems
[HttpGet("getwhateveritems")]
public async Task<ActionResult<TodoItem>> MySuperMethodName()
{
    // ...
}

Link  https://docs.microsoft.com/en-us/aspnet/...verb-attributes

Beachte, dass die Routen der Klasse (des Controllers) und der Methode konkateniert werden.

Aber bitte schau dir REST an!

Ist es das, was du suchst?

Gruss

Coffeebean
05.06.2019 17:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.175
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dein URL Konzept stimmt nicht, weil Du nicht ganz verstehst, wie HTTP funktioniert.Bitte schau Schau Dir nochmal an, was GET und was POST ist - und wozu die beiden Methoden da sind (gibt noch mehr).

Inhalte über den Body werden via POST übertragen - nicht via GET.

Das gesamte Tooling und Schnittstellen von Webtechnologien basieren auf diesem Standard.
Du kannst den Standard auch vollkommen untergaben - aber dann wirds scheisse.

Korrigier Dein URL Konzept.
05.06.2019 17:25 Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Auch wenn ich einen HttpPost empfange würde hätte ich zwei Methoden die sich nur mit dem Mentodennamen unterscheiden. Zur Info es ist ein Art JsonRPC

LG BierDav

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BierDav am 05.06.2019 17:28.

05.06.2019 17:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.175
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Methodennamen haben nichts mit der URL zutun, solange Du korrekte URL-Segmente via Route Attribute definierst.
Du kannst daher jeden Methodennamen nehmen, den Du willst.

Prinzipiell missbrauchst Du aber eine REST Middleware. ASP.NET Core Routing versteht per default kein JsonRPC.
Aber es gibt extra Middleware Projekte für Json RPC Routing.
05.06.2019 17:31 Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das der URL mit dem Methodennamen nichts zu tun hat weiß ich ja. Aber ich will so zu sagen einen eigenen Route für die Methode erstellen. Und das will ich ja wissen. :)

LG BierDav
05.06.2019 17:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.175
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wurde jetzt mehrfach gesagt (und gezeigt): Route Attribute.
05.06.2019 17:35 Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ahhh. Tschuldigung das ichs nicht Kapiert habe. aber was muss ich da jetzt genau reischreiben:
[RouteAttribute(???)]

LG BierDav
05.06.2019 17:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo BierDav,

siehe mein Beispiel oben inklusiver der bereits verlinkten Dokus. Bitte lies dies Doku und die Beiträge hier. Danke.

Gruss

Coffeebean
05.06.2019 17:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BierDav
myCSharp.de-Mitglied

avatar-4125.png


Dabei seit: 14.02.2019
Beiträge: 38
Entwicklungsumgebung: C#,Java(Android)

Themenstarter Thema begonnen von BierDav

BierDav ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank. Hab's getscheckt.

LG BierDav
05.06.2019 17:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.11.2019 23:00