Das Hinzufügen eines neuen OData-Controllers schlägt fehl.

Ich erstelle ein Beispiel aus zwei Web-API-OData-Beispielen, von denen jedes als separates Projekt funktioniert. Wenn ich jedoch die zweite ODataController-Klasse hinzufüge, funktioniert die Site nicht mehr und beschwert sich über OData-Pfadvorlagen, die zuvor funktioniert haben. Hier sind weitere Details:

Die folgende Aktion funktioniert einwandfrei, solange der Controller (ProductsController) der einzige Controller ist:

[HttpGet]
[ODataRoute("GetSalesTaxRate(state={state})")]
public IHttpActionResult GetSalesTaxRate([FromODataUri] string state)
{
    return Ok(GetRate(state));
}

Nun füge ich einen neuen Controller (MoviesController) mit ein paar Aktionen hinzu.

Ich erweitere die Owin Startup-Klasse so, dass sie so aussieht:

public void Configuration(IAppBuilder builder)
{
    var config = new HttpConfiguration();

    config.MapODataServiceRoute(routeName: "functions route", routePrefix: "functions", model: FunctionStartup.GetEdmModel());
    config.MapODataServiceRoute(routeName: "actions route", routePrefix: "actions", model: ActionStartup.GetEdmModel());

    builder.UseWebApi(config);
}

Beim Versuch, eine Webanforderung (URLBASE / functions / $ metadata) auszuführen, wird jedoch die folgende Fehlermeldung angezeigt:

System.InvalidOperationExceptionDie Pfadvorlage 'GetSalesTaxRate (state = {state})' für die Aktion 'GetSalesTaxRate' im Controller 'Products' ist keine gültige OData-Pfadvorlage. Ressource für das Segment 'GetSalesTaxRate' nicht gefunden.

Controller sind verschiedenen Routen zugeordnet ("Funktionen" und "Aktionen"). Kann es sein, dass das Problem darin besteht, dass jede Route einem eigenen EdmModel zugeordnet ist?

AKTUALISIEREN. Ich habe überprüft, ob weitere Controller hinzugefügt werden können, sofern sie sich auf dasselbe EDM-Modell beziehen. Sobald ich jedoch ein zweites Modell einführe (und auf MapODataServiceRoute verweise), bricht der gesamte Dienst ab. Gibt es eine Problemumgehung für die Unterstützung mehrerer Modelle?

UPDATE 2. Wenn ich die Unterklasse DefaultHttpControllerTypeResolver habe und nur einen Controller (einen von ihnen) aktiviere, funktioniert das auch. Aber ich bin immer noch verwundert, warum mehrere Controller, die unterschiedliche Modelle verwenden, ausfallen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage