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.
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:
[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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
Hallo BierDav,
willst du eine WebAPI machen? So wie hier? Tutorial: Create a web API with ASP.NET Core MVC
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Ja genau!
Nur (anhand des Bespiels) möchte ich dann api/PostTodo aufrufen und nicht api/Todo/...
LG BierDav
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
/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?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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:
[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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
Hallo BierDav,
wieso nicht? Du kannst das Routing Attribut auch auf die Methode hängen.
// 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
// GET: api/Todo/getwhateveritems
[HttpGet("getwhateveritems")]
public async Task<ActionResult<TodoItem>> MySuperMethodName()
{
// ...
}
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
Wurde jetzt mehrfach gesagt (und gezeigt): Route Attribute.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ahhh. Tschuldigung das ichs nicht Kapiert habe. aber was muss ich da jetzt genau reischreiben:
[RouteAttribute(???)]
LG BierDav
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“
Hallo BierDav,
siehe mein Beispiel oben inklusiver der bereits verlinkten Dokus. Bitte lies dies Doku und die Beiträge hier. Danke.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Vielen Dank. Hab's getscheckt.
LG BierDav
Trifft eine Programmiererin ihre Freundin und die Freundin fragt: "Mit welchen Typen hängst du so in letzter Zeit rum?" Die Programmiererin antwortet: „integers, booleans und strings“