2016-11-23 8 views
0

入力パラメーターを受け入れ、データベースを照会し、結果をJSONに戻すStudyDataControllerというコントローラーを持つ実用Web APIアプリケーションを使用しています。 http://localhost:3214/api/StudyDataController?param1=R01&param2=05-NOV-16を呼び出すと結果が返されます。同じアプリケーションのWeb APIエンドポイント

しかし、もう1つのAPIを作成する必要があります。入力パラメータが異なり、クエリが異なり、JSONで結果を返します。このため、同じアプリケーションにStudyDatawithDateControllerというコントローラを1つ作成しようとしています。私はhttp://localhost:3214/api/StudyDatawithDateController?param1=01-NOV-16&param2=COMPLETEのようにエンドポイントを呼び出そう

public class StudyDatawithDateController : ApiController 
{ [HttpGet] 
    public HttpResponseMessage Getdetails(DateTime param1,String param2) 
    { 
      List<OracleParameter> p = new List<OracleParameter>(); 
      p.Add(new OracleParameter("param1",OracleDbType.Date,param1, ParameterDirection.Input)); 
      p.Add(new OracleParameter("param2", OracleDbType.Varchar2,param2, ParameterDirection.Input)); 

      string connStr = ConfigurationManager.ConnectionStrings["StudyDataConnection"].ConnectionString; 
      using (OracleConnection dbconn = new OracleConnection(connStr)) 
      { 
       DataSet userDataset = new DataSet(); 
       var strQuery = "SELECT * from Studydata_VW where Submit_date> :param1 and Status = :param2 "; 
       var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) }; 
       var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json")); 
       ContentDispositionHeaderValue contentDisposition = null; 
       if (ContentDispositionHeaderValue.TryParse("inline; filename=StudyDatawithDate.json", out contentDisposition)) 
       { 
        response.Content.Headers.ContentDisposition = contentDisposition; 
       } 
       return response; 
       }}} 

それがNot Found Error言います。 enter image description here

webConfig.csは

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

たちは同じWebAPIのアプリケーション上に2つのコントローラを持つことができます下のようなものです。ほとんどの質問/サンプルでは、​​同じ名前コントローラを使用することについて議論しています。しかし、ここで私は別の名前を持っていると私はこれに対処することができます。

+2

コントローラは必要な数だけ持つことができます。 httpメソッド属性を追加することを忘れましたか?コードを投稿する必要があります。 – Marco

+0

おそらくはい。あなたの疑問を明確にする必要があります。たぶんいくつかのコード –

+0

@マルコ私は質問を編集しました。私がここで逃しているものを教えてください。 – trx

答えて

1

get要求を使用して1つの同じコントローラに移動し、異なる属性ルートで異なるアクションを使用すると、多くのルートを持つことができます。 ":/ PARAM2/{PARAM2:文字列のAPI/StudyDatawithDateController /パラメータ1/{文字列のparam1}" ちょうど[ルート(もしルートで

[HTTPGET] // http://localhost:3214/api/StudyDatawithDateController?param1=01-NOV-16&param2=COMPLETE を処理する方法の上のルーティング属性を追加})]

http://localhost:3214/api/StudyDataController?param1=R01&param2=05-NOV-16 [ルート( "API/StudyDataController/PARAM1/{PARAM1:文字列}/PARAM2/{PARAM2:文字列")]

上記の例では、まだ動作しません。しかし、あなたがurl、特にparam2とparam1を変更した場合、それらにいくつかのわかりやすい名前を付け、エンドポイントでは異なるパラメータを持ちます。

param2は2番目の例ではDateで、最初の文字列にCOMPLATEと表示されています。 - 属性ルートを追加する変更と、あなたは大丈夫です。

+0

私はiscomplateについて理解していません – trx

+0

[HttpGet] // http:// localhost:3214/api/StudyDatawithDateController?param1 = 01-NOV-16&param2 = COMPLETEのCOMPLETEに基づくパラメータの例です。例のルートを定義すると今すぐ変更されます –

+0

これは完全に意味があるかわかりません。あなたは、 "1つの同じコントローラに行くリクエストを使用して多くのルートを持つことができますが、2つの異なるコントローラに行くURLの例を挙げています。私が間違っている場合は私を訂正してください。ただし、例としてはRoute属性が必要とは思われません。 – ADyson

関連する問題