2017-01-04 10 views
0

私は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の戻りヘッダーを台無しにしないでカスタムエラーメッセージを返すにはどうすればよいですか?

ありがとうございます。

答えて

0

あなたは、代わりに例えばIHttpActionResultを返すことができます。

public IHttpActionResult GetInclusionWorkBooks() 
{ 
    string query = this.Url.Request.RequestUri.Query; 
    if (string.IsNullOrEmpty(query)) 
    { 
     return BadRequest(); 
    } 
    return Ok(db.GetInclusionWorkBookData()); 
} 

クエリが提供されている場合、結果はそれ以外の場合は、400不正な要求

+0

こんにちはなり、200(OK)と要求されたデータになりますjps、素早い答えをありがとう。私はすでにそれについて考えていましたが、OdataのリクエストはObjectResult を期待していたので動作しません。だから、IhttpActionResultを返すように変更すると、コード内で(たとえリターンランでも)トレースすることができる限り、すべて正常に動作しますが、レスポンスでは406(Not Acceptable)メッセージが返されます。 WebApi.Config.csの型を変更したことを確認しました。 "builder.EntitySet (" InclusionWorkBooks ");"これは、odata関数が実際にgetメソッドを照会し、その応答をJsonとして返すためです。 – user3872175

+0

こんにちは、WepApi.Configの変更は実際には間違っています。それをIHttpActionResultに変更しないでください。エンティティセットはまだInclusionWorkBookResultです。私の答えに記載されているようにGetメソッドを変更するだけです。あなたがフィドラーのようなツールを試してみると、データがJSON形式とステータスOKか、空のボディとステータスBadRequestになっていることがわかります。 – jps

+0

それは解決策です、おかげで – user3872175

関連する問題