2017-06-12 10 views
1

私は、angel 2アプリケーションからasp.net mvc web apiコントローラアクションを呼び出しています。しかし、私はそれは、getになりたい、ポストを行うにはしたくないので、私は角2からこれを呼び出していたときに、私のような何かをしたい非文字列関連のデータをgetリクエストに渡す方法web api

[Route("api/getItems")] 
    [HttpPost] 
    public ReturnObject GetItems(DateRangeVM dateRange){ 
    } 

:私はこのような呼び出しからオブジェクトを受け入れることができますこの:

return this.http.post(this.API_URL_BASE + '/api/getItems', dateRange, defaultOptions).map((response: Response) => { 
     return <any[]>response.json(); 
    }).catch(this.handleError); 
    } 

が、実際にはもっとこのような:

return this.http.get(this.API_URL_BASE + '/api/getItems', dateRange, defaultOptions).map((response: Response) => { 
     return <any[]>response.json(); 
    }).catch(this.handleError); 
    } 

しかし、この最後のオプションは、第二のオプションとして、データを受け付けません。私は文字列引数としてデータを渡したくありません。これは、データがより複雑になると、これが面倒です。

+0

' $ http.get'のみクエリパラメータを取ることができ、あなたはこれを行うには意味していますか? – Sajal

+0

しかし、あなたは、クエリ内のペイロードを送信することはできません変更することができ、良い習慣ではありません。なぜ '$ http.post'にこだわるのでしょうか? – Sajal

+0

"データが文字列引数として渡されるのを避けたいのは、データが複雑になったときにこれが乱雑であるからです。"パラメータは文字列ではなく、別のオブジェクト内のオブジェクトのセットです。 – Sam

答えて

0

FromUri属性を使用して、クエリ文字列を複合オブジェクトにバインドします。 Angularは、クラスの各プロパティをクエリ文字列パラメータとして送信する必要があります。 `this.API_URL_BASE + '?/ API /のgetItems DATERANGE =' + dateRange` -

public ReturnObject GetItems([FromUri] DateRangeVM dateRange){ 
} 
0

私は、これは正確にあなたの質問に答えていないけど、ここで私は同様の問題にアプローチする方法である...ここで

は、サンプルユーザーコントローラです。このメソッドは、すべてのユーザーまたは指定した開始日に一致するユーザーを戻すことを目的としています。角度サービスで

public IEnumerable<User> Get(DateTime? startDate = null) 
{ 
    return _userRepo.Get(startDate); 
} 

私は次のように定義される:ここでは

function getUsers(startDate) { 
    var users = $http({ 
     method: 'get', 
     url: config.remoteServiceName +'users/', 
     params: { 
      startDate: startDate 
     } 
    }).then(function (response) { 
     var values = []; 
     angular.forEach(response.data, function (value) {    
      values.push(User.apiResponseTransformer(value)); 
     }); 
     return values; 
    }).catch(function (errorResponse) { 
     throw errorResponse; 
    }); 

    return users; 
} 

はGETでリクエストボディを使用していない理由についていくつかの情報を提供して回答されている別のSOの質問へのリンクです望ましい:

Read content body from a HTTP GET in C# WebAPI

幸運!

+0

こんにちはZoop、私は角度2(バージョン4)を使用しています。多分誰かがそれが役に立つと思うかもしれません。とにかくありがとう。 – Sam

関連する問題