私はOdataを初めて使ったので、.net(c#)とこのビデオhttps://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.htmlを使ってAPIを書いています。レスポンスodataの代わりにエラーを返す.net
問題は、私は、このコンストラクタメソッドとても似ていることである:あなたが見ることができるようになりますと
[EnableQuery]
public ObjectResult<InclusionWorkBookResult> GetInclusionWorkBooks()
{
string query = this.Url.Request.RequestUri.Query;
if (string.IsNullOrEmpty(query))
{
return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "");
}
return db.GetInclusionWorkBookData();
}
、アイデアは、ユーザーが(クエリを指定しない場合、それは禁断のエラーコードを返すということですこれは、完全なデータセットが何百万行になるとフィルタリングすることです)。 しかし、これは動作しません。なぜなら、Request.CreateErrorResponsはHttpResponseMessageであり、getはObjectResultを返します。
odataを照会する際に、(URL照会を乱すことによって)禁じられたエラーが出ることがあります。
私の質問は次のとおりです。 GETの戻りヘッダーを台無しにしないでカスタムエラーメッセージを返すにはどうすればよいですか?
ありがとうございます。
こんにちはなり、200(OK)と要求されたデータになりますjps、素早い答えをありがとう。私はすでにそれについて考えていましたが、OdataのリクエストはObjectResultを期待していたので動作しません。だから、IhttpActionResultを返すように変更すると、コード内で(たとえリターンランでも)トレースすることができる限り、すべて正常に動作しますが、レスポンスでは406(Not Acceptable)メッセージが返されます。 WebApi.Config.csの型を変更したことを確認しました。 "builder.EntitySet (" InclusionWorkBooks ");"これは、odata関数が実際にgetメソッドを照会し、その応答をJsonとして返すためです。 –
user3872175
こんにちは、WepApi.Configの変更は実際には間違っています。それをIHttpActionResultに変更しないでください。エンティティセットはまだInclusionWorkBookResultです。私の答えに記載されているようにGetメソッドを変更するだけです。あなたがフィドラーのようなツールを試してみると、データがJSON形式とステータスOKか、空のボディとステータスBadRequestになっていることがわかります。 – jps
それは解決策です、おかげで – user3872175