Peculiar Situation, ich habe diese MethodeRouting für HTTP-Get ohne Argumente funktioniert nicht (web.api)
[HttpGet]
[Route("api/models/getallmachines")]
public IHttpActionResult GetAllMachines()
{
var model= db.machine.ToList();
return Ok(model);
}
Und ich bekomme immer, dass die Ressource nicht gefunden wurde, als http://localhost:xxx/api/models/getallmachines
Aufruf. Aber wenn ich ein Argument hinzufügen, sagen
[HttpGet]
[Route("api/models/getallmachines/{blub}")]
public IHttpActionResult GetAllMachines(int blub)
{
var model= db.machine.ToList();
return Ok(model);
}
Es arbeitet mit http://localhost:xxx/api/models/getallmachines/0
! Warum? Das ist mein webapiconfig
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
UPDATE
Verwendung von route Debugger im Browser erhalte ich
Es gibt eine andere Methode in demselben Controller ist, diese hier
[HttpGet]
[Route("api/models/getmodel/{id}")]
public IHttpActionResult GetModel(int id)
{
var model = models.FirstOrDefault(p => p.ApiModelId == id);
if (model == null)
return NotFound();
return Ok(model);
}
Welches gibt mir die JSON-Datei im Browser und diese Route Debugger Informationen
Was passiert, wenn Sie routeTemplate zu ändern: "api/{Controller}/{Aktion}/{ID}". Dann würden getallmachines als die Aktion abgebildet werden. Ich vermute, dass es jetzt vielleicht als id gedeutet werden könnte. – m4ttsson
Nein, das war es nicht, leider – rst
Was passiert mit einem Attribut 'RoutePrefix (" api/models ")' auf Ihrer Controller-Klasse und einem Attribut 'Route (" getallmachines ")' auf Ihrer Methode – Troopers