1

ich eine Web-API-Endpunkt wie etwas weiter unten haben -ASP.Net Web API mit optionalen Parametern Routing

[HttpPost] 
[ActionName("ResetPassword")] 
public HttpResponseMessage ResetPassword(string userName, string Template, string SubjectKey,[FromBody] Dictionary<string, string> KeyWords) 

Wie Sie sehen, gibt es 4 Parameter an die WebAPI. Außer dem ersten Parameter 'userName' sind jedoch alle anderen Parameter optional. Alle Parameter haben einen String-Typ und sind daher standardmäßig nullwertfähig.

Ich habe die Route mit Convention-based Routing (es ist ein Legacy-Projekt) konfiguriert.

Config.Routes.MapHttpRoute(
      name: "ResetPasswordResetV2", 
      routeTemplate: "Email/ResetPassword", 
      defaults: new { controller = "Email", action = "ResetPassword", routeValue = true }); 

Ich erwartete es mit entweder zu arbeiten -

http://{base address}/V2/Core/Email/[email protected]&template=&subjectKey= 
http://{base address}/V2/Core/Email/[email protected] 

Problem. Ich bekomme einen 404. Irgendwelche Tipps was ich falsch mache. Ich habe alle Arten von SO- und Doc-Links gelesen und es scheint zu viele Informationen zu verarbeiten.

Zusätzlich, was bedeutet das 'routeValue = true'?

Update: Ich habe es mit der ersten URL arbeiten, aber ich hätte erwartet, dass es auch mit der zweiten API funktioniert. Noch eine Info, mein Controller hat eine weitere Aktion mit ähnlichen Sätzen von Eingabeparametern, aber der Aktionsname ist anders (Kann das in irgendeiner Weise mess es?)

+0

Sie müssen klären, was Mittel nicht funktioniert. Erhalten Sie einen Fehler? ist die Aktion getroffen, aber die Parameter null. Was ist das gewünschte Verhalten? – Nkosi

+0

Ich habe meine Frage aktualisiert. Grundsätzlich bekomme ich eine 404. – Dibzmania

+0

Dann müssen Sie eine [MCVE] zur Verfügung stellen, die verwendet werden kann, um das Problem zu reproduzieren. Zeigen Sie mehr vom Zielcontroller an. und mehr, wie die Routen konfiguriert sind. Dies sind normalerweise die zwei Hauptbereiche, die Ihr Problem verursachen können. – Nkosi

Antwort

1

Try this:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{userName}/{template}/{subjectKey}", 
    defaults: new { controller = "Email", action = "ResetPassword", template = UrlParameter.Optional, subjectKey = UrlParameter.Optional 
}); 

Wo, userName ist erforderlich, aber template und subjectKey sind optional.

URLs, wird wie folgt aussehen (supoussing dass template-template1 und subjectKey gleich ist, gleich 3):

http://{base address}/V2/Core/Email/ResetPassword/[email protected]/template1/3 

Oder keine params mit nur userName:

http://{base address}/V2/Core/Email/ResetPassword/[email protected] 

Wenn es vollständig notwendig ist, können Sie Informationen als Abfrageparameter senden, aber Sie müssen dies in Controller angeben.

URL eingegeben:

enter image description here

Params in Controller erhalten:

enter image description here

+0

In meinem Fall hat der Client die Parameter als Teil der Abfrageparameter gesendet. In dem Beispiel, das Sie gezeigt haben, werden die Parameter als Teil der Routenwerte gesendet. Gibt es eine Möglichkeit, dasselbe mit Abfrageparametern zu tun? – Dibzmania

+0

Ich habe gerade einen Test gemacht und ja, es ist möglich, als Abfrageparameter zu senden, werde ich meine Antwort aktualisieren – Flxtr