this チュートリアルに従ってWebAPI RESTサービスを作成しました。
その後、_http://baseaddress/api/Contacts
_をポイントすることで、すべての連絡先のリストを読み込むことができます。
次に、ODataエンドポイントを有効にするために、WebApiConfig.csのRegister
メソッドに次のコードを追加しました。
_config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Contact>("Contacts");
config.MapODataServiceRoute(
routeName: "OData",
routePrefix: "odata",
model: builder.GetEdmModel());
_
また、Contact.GetContacts()
メソッドに_[EnableQuery]
_パラメーターも追加しました。そうすれば、次のような特定の連絡先を照会できます。
_http://baseaddress/odata/Contacts?$filter=startswith(Name,'A')
_
そしてそれは魅力のように機能します。
残念ながら、_[EnableQuery]
_を入力すると、WebAPIエンドポイントが機能しなくなり、代わりに次のエラーが表示されます。
_No non-OData HTTP route registered.
in System.Web.OData.Extensions.HttpConfigurationExtensions.GetNonODataRootContainer(HttpConfiguration configuration)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.GetRootContainer(HttpRequestMessage request, String routeName)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestScope(HttpRequestMessage request, String routeName)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestContainer(HttpRequestMessage request, String routeName)
...
_
これを修正するにはどうすればよいですか?
私はこの問題に遭遇しました。依存性注入で作業しているので、GlobalConfiguration.Configuration.EnableDependencyInjection()
をstartup.cs
例.
using System.Web.OData.Extensions;
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.EnableDependencyInjection();
}
}
_Startup.cs
_にconfig.EnableDependencyInjection()
を追加するとうまくいきました。
_var config = new HttpConfiguration();
config.EnableDependencyInjection();
_
私は以前にこの問題に遭遇し、それの下に行を追加することでうまくいきました
protected void Application_Start()
{
GlobalConfiguration.Configuration.EnableDependencyInjection();
.... }
WebApiプロジェクトの依存関係(NuGet)を次のように更新すると、このエラーが発生しました。
以前使用したバージョンにダウングレードした後、エラーは再び消えました。
私の場合、別のプロジェクトOdataコードがまったくなかったがあったにもかかわらず、上記のエラーが発生しました。ですから、これは非常に奇妙なメッセージです。
私の解決策は、packages
フォルダーからすべてのパッケージを削除することでした。その後、再び機能しました。一部のOdataパッケージはまだこのフォルダーにありました。
私の場合、ODATAルート(およびコントローラー)、および他のAPIルート(およびコントローラー)を備えたWebサイトがありました。起こったのは、他のルートが単にODATAのルートと競合していたことです。異なるC#名前空間やクラスなどであってもです。
当初、私のコントローラーは例えば次のようでした:
public class UserController : ApiController
{
[HttpPost]
public void Create([FromBody] string email)
{
}
}
また、ODATAのどこかに「ユーザー」ルートがありました(異なるネームスペース、異なるURLなど)。そのため、次のようにRoute属性を明示的に追加する必要がありました。
public class UserController : ApiController
{
[HttpPost]
[Route("api/user/create")]
public void Create([FromBody] string email)
{
}
}
私もこのエラーを受け取りましたが、私の場合は大文字と小文字の区別の問題でした。私は電話していた
https://www.example.com/odata/MyEntities
の代わりに
https://www.example.com/odata/myentities
、登録されたとおり。
必ずルート構成と呼び出し元のURLを確認してください。