Mam side-by-side Web API 2.2 APIController i OData v4 ODataController. Moja APIController wykorzystuje routing przypisuje wewnętrznie tak (nie ma predefiniowane ustawienia domyślne routing):Prefiks trasowania OData v4?
[RoutePrefix("api")]
public class MyController : ApiController
{
[HttpGet]
[Route("My")]
public IHttpActionResult Get()
{
//Code Here
}
[HttpGet]
[Route("My")]
public IHttpActionResult Get([FromUri] String mykey)
{
//Code Here
}
}
i jako takie są kierowane do przez ./api/My i ./api/My/?mykey=value
a próbowałem skonfigurowaniu ODataController podążać podobną garnitur:
[ODataRoutePrefix("My")]
public class oMyController : ODataController {
[HttpGet]
public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) {
//Code Here
}
[HttpGet]
[ODataRoute("({mykey})")]
public IHttpActionResult Get([FromODataUri] String mykey) {
//Code Here
}
}
definiowania OData trasę z wyprzedzeniem tak:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyModel>("My");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel()
);
ale próby uzyskania dostępu ./odata/My i ./odata/My(value) kończą przechodzenie do mojego kontrolera APIController zamiast ODataController.
W jaki sposób mogę je skierować za pomocą różnych prefiksów, ale o tej samej nazwie i przekazać je odpowiednim kontrolerom. Nie chcę mieć innej nazwy dla każdej trasy, jeśli mogę temu zapobiec, prefiksy powinny zająć się wszystkim, ale z jakiegoś powodu nie są.
W jakich nazw 'ODataRoute' znaleziono! Nie mogę go znaleźć –
OdataRoute był w System.Web.Http.OData.Routing, ale został przestarzały. Nowy dom znajduje się w przestrzeni nazw System.Web.OData.Routing, którą można pobrać jako część pakietu nuget Microsoft.AspNet.OData. – Xorcist