4つの入力パラメータを使用してWeb APIを作成しています。入力パラメータはSelect文のwhere句で使用されます.OracleのフィールドはROOM (Varchar),SUBMIT_DATE(Date)(eg:01-JAN-16)
です。 URLは `/ api/TGSSampleDatas?Room = 654 & SUBMITDATE = '01 -Jan-16 'のようなものでなければなりません。だから、C#で、私はシオマネキ {"Message":"The request is invalid.","MessageDetail":"The parameters dictionary contains a null entry for parameter 'SUBMITDATE' of non-nullable type 'System.DateTime' for method 'System.Net.Http.HttpResponseMessage Getdetails(System.String, System.DateTime)' in 'TGSSampleData.Controllers.TGSSampleDatasController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."}
Oracle APIを照会するための入力パラメータを取得するWeb API
0
A
答えて
1
にSQL文が間違っている中で、以下のエラーを取得
public class TGSSampleDatasController : ApiController
{
[HttpGet]
public HttpResponseMessage Getdetails(string ROOM,DateTime ? SUBMITDATE = null)
{
List<OracleParameter> prms = new List<OracleParameter>();
List<string> selectionStrings = new List<string>();
string connStr = ConfigurationManager.ConnectionStrings["TGSDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = " + ROOM +"and SUBMIT_DATE =" +"'"+SUBMITDATE+"'";
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=TGSData.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
のようにGETアクションとコントローラーを作成しています。あなたは、文字列連結の使用していた(をではなくください)あなたは'
とそれを囲む必要がありますので、もし
"SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = " + ROOM +"and SUBMIT_DATE =" +"'"+SUBMITDATE+"'";
//--------------------------------no ticks-^----^ -no space--^
- ルームは、それ以外の場合は、文の一部となり、文字列です。
- また、ROOMと
and
の間にスペースはありません。
本当の修正はROOM
とSUBMITDATE
の両方のパラメータを使用することです。これを行うことで、そのような問題が起こるのを防ぐことができます。
私はパラメータの種類を推測していますが、それらを修正する必要があります。あなたがやっているような
List<OracleParameter> prms = new List<OracleParameter>();
prms.Add(new OracleParameter("ROOM", OracleDbType.Varchar2, ROOM, ParameterDirection.Input));
prms.Add(new OracleParameter("SUBMITDATE", OracleDbType.Date, SUBMITDATE ?? System.DBNull.Value, ParameterDirection.Input));
// note that because you are using a nullable type as input you should pass in DBNull.Value as the value if the value is null in your c# code.
var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = :ROOM and SUBMIT_DATE = :SUBMITDATE";
文字列の連結には、SQLインジェクション攻撃に対してシステムが脆弱になり、あなたのSQLコードに問題が追加されます。後者は、'
マークを含む値を渡すことで説明することができます。もう一度やり直すと、SQLステートメントを終了し、最後に別のステートメントを追加することができます。
関連する問題
- 1. API APIから統計API APIを取得するためのREST API
- 2. Apache Flink Webコンソールのステータスを照会する方法[metrics api]
- 3. 複数の配列をWeb APIの入力パラメータとして使用する
- 4. フィルタリングのためのWeb API動的パラメータ
- 5. サブスクリプション/サブスクライバを照会するFacebook API
- 6. パラメータ、RESTなどを検証するためのWebサービスAPI?
- 7. 私はalbulm写真を取得するにはFacebookのAPIを照会していますFacebookのAPI
- 8. データベースを照会するためのツール
- 9. メンバーシップデータベースをメンバーシップAPIで照会
- 10. Web Apiのメソッドを取得するオブジェクトのコレクションを取得
- 11. 別のWeb APIを呼び出すためのWeb APIを作成する
- 12. Googleの認証されたOAuthスコープを照会するGoogle API?
- 13. Wiktionary APIを照会して品詞を得る方法
- 14. Facebook Graph API:会場別イベントを取得
- 15. Outlook API - 会議室カレンダーを取得
- 16. 複数のアクションのディスパッチAPIを取得するためのAPIを取得する
- 17. GoogleドライブレストAPIのメタデータスキーマを取得するためのAPIはありますか
- 18. ゲームランキングの結果を得るためのAPIまたはWebサービス?
- 19. Zohoで入力した最後のレコードをREST APIで取得する方法
- 20. PHP/cURLを使用してAzure認知サービスを照会する - Web Search API v5
- 21. グラフィックスまたはビデオメモリを取得するためのAPI
- 22. スポーンされたVM IDを取得するためのAPI?
- 23. このURLでLaravel APIを取得するためのApache設定:www.example.com/api
- 24. 角度2/Web APIを - 入力
- 25. パーティションの最後に挿入されたデータを取得するためにazureテーブルを照会します。
- 26. Web MIDI APIの入力メッセージ(onmidimessage)を解析する方法
- 27. ユーザーのリストを取得するためのPHPのGoogle API
- 28. SharePoint ClientObjectModel APIのファイルを照会
- 29. ユーザーのSkype IDを取得するためのAPIエンドポイント
- 30. OSパーティションテンプレートのIDを取得するためのSoftLayer API
重複した質問は、ここで解決策を見つけることができます:http://stackoverflow.com/questions/11862069/optional-parameters-in-asp-net-web-api – Turrican
私は/ api/TGSSampleDatasを試してみると? = 654&SUBMITDATE = 01-Jan-16エラーです。「Oracle.ManagedDataAccess.Client.OracleExceptionタイプの例外がOracle.ManagedDataAccess.dllで発生しましたが、ユーザーコードで処理されませんでした。」 – trx
これは実際のエラーではありません。スタックトレース。 –