私はこの一日中苦労しています。私はiveがこれに見られるすべての答えの終わりに達したと思います。たぶん、私は特別な、または多分私は何か愚かなやっている。 私は最近V3からV4にアップグレードした(私は思う)。私はSystem.Web.OData名前空間を使用しています。ここで 属性ルーティング:「有効なODataPathテンプレートではありません」
は私のWebAPIConfigusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using System.Web.OData.Routing;
using System.Web.OData.Routing.Conventions;
using GizmoAPI.Models;
namespace GizmoAPI
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Counterparty>("Counterparties");
config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
config.EnableDependencyInjection();
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
config.AddODataQueryFilter();
var cors = new System.Web.Http.Cors.EnableCorsAttribute("http://localhost:56248", "*", "*");
config.EnableCors(cors);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
config.EnableSystemDiagnosticsTracing();
}
}
}
であり、ここで基本的なコントローラです:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.OData;
using System.Web.OData.Routing;
using GizmoAPI.Models;
namespace GizmoAPI.Controllers
{
public class CounterpartiesController : ODataController
{
private GizmoEntities db = new GizmoEntities();
// GET odata/Counterparties
[EnableQuery]
public IQueryable<Counterparty> GetCounterparties()
{
return db.Counterparties;
}
// GET odata/Counterparties(5)
[EnableQuery]
[ODataRoute("{key}")]
public SingleResult<Counterparty> GetCounterparty([FromODataUri] int key)
{
return SingleResult.Create(db.Counterparties.Where(counterparty => counterparty.CounterpartyID == key));
}
その後で本当にhttp://localhost:60965/odata/Counterparties/101 または http://localhost:60965/odata/101
か何かのようにURLを呼び出そうとイムこの点。私はそれを有効にするために欠けているいくつかの種類の構成があるように感じる。私はエラー "コントローラ 'Counterparties'の 'GetCounterparty'アクションのパステンプレート '{key}'が有効なODataパステンプレートではありません。 '{key}'セグメントのリソースが見つかりません。
はい。そして、それは動作します。しかし、私がしたいのは、コントローラ内のルートです。私はユーザーが得ることができるように望むビュー(実体)のカップルの異なるバージョンがあります。したがって、api/counterpartiesはバニラバージョンを取得し、api/counterparties/advancedはそのビューの高度なバージョンを取得します。 – brhardwick