2017-05-05 24 views
0

Swaggerではいくつかの値を挿入し、それらの値を含む文字配列をLinqに渡します。 (この場合、IDは文字列です)。配列ではなく単純な文字列を渡すと、1つの値を挿入するように動作します。しかし、私は値の配列を渡す必要があります。C# - 値を挿入して文字列の配列をLinqに渡すと、挿入された値の代わりにNULLが表示されます

は、ここで(それが配列のために奇妙に見える)2つの値を挿入しようとしているAPIによって構築されたリンクです:http://localhost:port/api/Members?ids=97882831302&ids=97882831308

問題は、アレイが代わりに挿入された値のNULL示すことです。そして、私は次のエラーを取得する:のような、と

パスデータ:

"ExceptionMessage": "Unable to create a null constant value of type 'System.String[]'. Only entity types, enumeration types or primitive types are supported in this context."

enter image description here

public class MembersController : ApiController 
    { 
    public HttpResponseMessage GetAllMembersByIdentifiers(string[] ids) { 
       using (sampleEntities entities = new sampleEntities()){ 
        var numbers = entities.tblmembers 
         .Where(p => ids.Contains(p.identify) ).ToList(); 

        if (numbers != null) 
        { 
         return Request.CreateResponse(HttpStatusCode.OK, numbers); 
        } 
        else 
        { 
         return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Member with id: " + ids + " not found"); 
        } 
       } 
      } 
} 

答えて

0

oは、あなたのコード内の2つの問題..

FIRSTをしたと思います。

98989794, //<--- 
4343545345 

SECOND:あなたのC#で

は、私のようなnullまたは空の文字列をチェックするためにあなたに提案することができます:

public class MembersController : ApiController 
     { 

     [HttpGet] 
     [Route("api/Members/Find/{ids}")] 
     public HttpResponseMessage FindMemebers([FromUri]string[] ids) { 


    // CHECK THE ARRAY NOT EMPTY 
     if(!ids.Any() || ids.All(xx=> string.isNullOrEmpty(xx)) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "empty params"); 

        using (sampleEntities entities = new sampleEntities()){ 
         var numbers = entities.tblmembers 
          .Where(p => ids.Contains(p.identify) ).ToList(); 

         if (numbers != null) 
         { 
          return Request.CreateResponse(HttpStatusCode.OK, numbers); 
         } 
         else 
         { 
          return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Member with id: " + ids + " not found"); 
         } 
        } 
       } 
    } 
+0

「)」「場合」第一に欠けている行がありますようです。また、 "BadRequest()"が機能しない(HttpResponseに変換できないと言っています)。私はそれを "CreateErrorResponse"に置き換えました。私はまた、コンマでスワッガーに値を挿入しようとしました。 "、"スワッガーは各行に値を挿入するように言います(コンマの記載はありません)。 「ExceptionMessage」:「値はnullにはなりません。パラメータ名:source」、 「ExceptionType」:「System.ArgumentNullException」 ' – adlisval

+0

ああ、申し訳ありません...あなたのメソッドをGET ([ルート]装飾)と[HttpGet]動詞の装飾を入れて)...([FromUri] string [] ids)を設定しようとすると私はそれをアスペクトとしてQUERYSTRING PARAMSとして現時点で –

+0

コードを共有してくださいどうやってするか?私は '[Route] [HttpGet] public HttpResponseMessage GetAllMembersByIdentifiers(string [] ids){...'を試しました。 'BadRequest()'はまだ赤で下線が引かれています。私はあなたのメソッドを呼び出すことを意味するかどうかを正確にはわかりません...名前を変更したら、試しましたが、 'BadRequest()'にはまだ下線が引かれています。 – adlisval

-1

それがあった解決何:

@ federico-によって示唆 [FromUri]を追加
  1. スカムジー

  2. string[]List<string>に置き換えます。コード中のSO

次のようになります。

public HttpResponseMessage FindMemebers([FromUri]List<string> ids) { ... 
関連する問題