web-dev-qa-db-ja.com

非OData HTTPルートは登録されていません

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)
...
_

これを修正するにはどうすればよいですか?

18
Teejay

私はこの問題に遭遇しました。依存性注入で作業しているので、GlobalConfiguration.Configuration.EnableDependencyInjection()startup.cs

例.

using System.Web.OData.Extensions;
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalConfiguration.Configuration.EnableDependencyInjection();
    }
}
24
ZarX

_Startup.cs_にconfig.EnableDependencyInjection()を追加するとうまくいきました。

_var config = new HttpConfiguration();

config.EnableDependencyInjection();
_
4
jt03

私は以前にこの問題に遭遇し、それの下に行を追加することでうまくいきました

protected void Application_Start()
            {  
         GlobalConfiguration.Configuration.EnableDependencyInjection();
             ....  }
2
M. Abouzeid

WebApiプロジェクトの依存関係(NuGet)を次のように更新すると、このエラーが発生しました。

  • Microsoft.AspNet.OData、version = "7.0.1"
  • Microsoft.OData.Core、version = "7.5.0"
  • Microsoft.OData.Edm、version = "7.5.0"
  • Microsoft.Spatial、version = "7.5.0"

以前使用したバージョンにダウングレードした後、エラーは再び消えました。

  • Microsoft.AspNet.OData、version = "5.8.0"
  • Microsoft.OData.Core、version = "6.19.0"
  • Microsoft.OData.Edm、version = "6.19.0"
  • Microsoft.Spatial、version = "6.19.0"
1
Alexander

私の場合、別のプロジェクトOdataコードがまったくなかったがあったにもかかわらず、上記のエラーが発生しました。ですから、これは非常に奇妙なメッセージです。

私の解決策は、packagesフォルダーからすべてのパッケージを削除することでした。その後、再び機能しました。一部のOdataパッケージはまだこのフォルダーにありました。

0
Hugo Nava Kopp

私の場合、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)
    {
    }
}
0
Simon Mourier

私もこのエラーを受け取りましたが、私の場合は大文字と小文字の区別の問題でした。私は電話していた

https://www.example.com/odata/MyEntities の代わりに

https://www.example.com/odata/myentities、登録されたとおり。

必ずルート構成と呼び出し元のURLを確認してください。

0