Laden...

ASP.NET Core Route zu einem API-Controller via Tag-Helper

Erstellt von monsee vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.159 Views
M
monsee Themenstarter:in
30 Beiträge seit 2018
vor 5 Jahren
ASP.NET Core Route zu einem API-Controller via Tag-Helper

Guten Morgen zusammen,

ich habe ein Problem, ein Formular mittels der Tag Helper ans Laufen zu bekommen.
Das Formular soll einen POST Request an meinen API-Controler, namentlich ImagesController richten.

Ich habe mir die Doku zu den Tag-Helpern angesehen, aber ich habe ein Problem mit der Action.

Doku zu Tag-Helper

Wenn ich den Link hardcode, klappt das natürlich:

<form method="post" action="../../../_api/Qsj/Images/Upload/@lockCardId" enctype="multipart/form-data" class="dropzone" id="myAwesomeDropzone"></form>

So sieht mein Controller aus:


 [Route("_api/Qsj/[controller]/Upload/{lockCardId:int}")]
        [HttpPost]
        public async Task<IActionResult> Upload(int lockCardId)
{...}

Aber wie erzeuge ich die Route mittels Tag-Helper?

<form method="post" asp-controller="_api/Qsj/Images" asp-action="Upload" asp-route-lockcardid="@lockCardId" enctype="multipart/form-data" class="dropzone" id="myAwesomeDropzone"></form>

Ich glaube mittlerweile jede Kombination von asp-controller durchprobiert zu haben.
Also auch _api/Qsj/Images/Upload ohne action-TagHelper.

Das action-Attribut in der gerenderten Seite ist immer leer.

Vielleicht könntet Ihr mir das einmal erklären.

Besten Dank,

monsee

M
monsee Themenstarter:in
30 Beiträge seit 2018
vor 5 Jahren

Ok, ich habe es jetzt nach einigem Probieren rausgefunden.

Meine Route im Controller:


[Route("_api/Qsj/Images/{lockcardid:int}")]
[HttpPost("{lockcardid}")]
public async Task<IActionResult> Upload(int lockCardId)
{
}

Mein Formular:

<form method="post" asp-controller="Images" asp-action="Upload" asp-route-lockcardid="@lockCardId" enctype="multipart/form-data" class="dropzone" id="myAwesomeDropzone"></form>

Was ich noch nicht ganz kapiere: Meine Controller Klasse heißt ImagesController und liegt im Namespace: TestApp._api.Qsj

Wenn ich einen weiteren ImagesController in einem anderen Namespace hätte:
TestApp._api.Xyz, woher weiß der Tag-Helper denn dann, welchen Controller er verwenden muss?

Oder ist das eher so, dass ich nur einen ImagesController habe und mittels der Methoden, was ja dem asp-action entspricht arbeiten muss? Also dass ich dann jeweils eine Methode für zum Beispiel:

UploadImages(int lockCardId)
UploadDocument(int lockCardId)
...

Brauche?

monsee

16.807 Beiträge seit 2008
vor 5 Jahren

Dein Namespace ist natürlich Käse, siehe Names of Namespaces

Ansonsten absolutes Basic: verwende Routen - und zwar nicht nur in der Definition, sondern auch in der View.
D.h. Route by Name.

Der Namespace ist völlig egal - muss er auch sein.