Ich habe den folgenden Code, aber die Anfrage Enden (Foo()/Bar()) immer in No action was found on the controller 'Device' that matches the request.
ASP.NET WebAPI - Es wurde keine Aktion gefunden
ich eine benutzerdefinierte Route in meinem WebApiConfig haben:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
Meine ASP.NET WebAPI Controller:
[HttpPost]
public void UpdateToken(string newToken)
{
_deviceHandler.UpdateToken(newToken);
}
zu meiner ASP.NET WebAPI Abfrage ich RestSharp bin mit.
private static void Send(string resource, Method method, object payload)
{
var client = new RestClient(baseUrl);
var request = new RestRequest(resource, method);
request.XmlSerializer = new JsonSerializer();
request.RequestFormat = DataFormat.Json;
request.AddBody(payload);
var response = client.Execute(request);
// ... handling response (exceptions, errors, ...)
}
public void Foo()
{
var newToken = "1234567890";
Send("/api/device/updatetoken", RestSharp.Method.POST, newToken);
}
public void Bar()
{
var newToken = new { newToken = "1234567890" };
Send("/api/device/updatetoken", RestSharp.Method.POST, newToken);
}
Der einzige Weg, diesen Fehler zu vermeiden, ist eine Wrapper-Klasse mit einer Eigenschaft zu schaffen (get; set;) darin der den Namen des Controllers Arguments (newToken) hat.
Ich habe eine Menge Anfragen, die eine oder zwei benutzerdefinierte Zeichenfolgen (undefinierte Länge) als Post sendet (get ist in der Länge begrenzt). Aber für jedes Szenario eine Wrapper-Implementierung zu erstellen, ist ein echter Overhead! Ich suche nach einem anderen Weg zu gehen.
PS: Ich hoffe, ich habe keine Fehler gemacht durch das Szenario zu vereinfachen =)
Vielen Dank, nur das fehlende [FromBody] -Attribute war der Fehler. – dannyyy
Das hat gerade meine Nacht gerettet. Ich hämmerte mir den Kopf und fragte mich, warum diese eine bestimmte Route eine 404 bekam. Es braucht eine int, wo der Rest meiner Routen einen Referenztyp hat. Das Hinzufügen des [FromBody] -Attributs hat den Trick gemacht. – squillman
1 für die Rettung meines halben Tages meines Lebens, die Hälfte bereits verschwendet, danke –