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. ADL Storeのフォルダとファイルを照会するための.NET API
- 2. Apache Flink Webコンソールのステータスを照会する方法[metrics api]
- 3. Web Api .NetのAuthorizeAttributeからPOSTパラメータを取得する方法
- 4. API APIから統計API APIを取得するためのREST API
- 5. Cordova AzureからAzure Web APIを照会する方法
- 6. CommonCrawlを照会してDigital Object Identifier(DOI)データベースにデータを入力するJava API
- 7. 複数の配列をWeb APIの入力パラメータとして使用する
- 8. PHP - 会社のアップデートを取得するためのLinkedin APIの統合
- 9. フィルタリングのためのWeb API動的パラメータ
- 10. パラメータ、RESTなどを検証するためのWebサービスAPI?
- 11. ワトソンディスカバリーAPIを照会する方法は?
- 12. サブスクリプション/サブスクライバを照会するFacebook API
- 13. データベースを照会するためのツール
- 14. 私はalbulm写真を取得するにはFacebookのAPIを照会していますFacebookのAPI
- 15. Firefox Web Extention API - ダウンロードフォルダを取得する
- 16. ピアの状態を照会するためのAPIはありますか
- 17. Web Apiのメソッドを取得するオブジェクトのコレクションを取得
- 18. メンバーシップデータベースをメンバーシップAPIで照会
- 19. どのようにasp.net Web APIにパラメータを渡す方法を取得する?
- 20. 別のWeb APIを呼び出すためのWeb APIを作成する
- 21. Admin Privilede Grantingを取得するためのAPIをレポートする
- 22. Googleの認証されたOAuthスコープを照会するGoogle API?
- 23. Wiktionary APIを照会して品詞を得る方法
- 24. 複数のアクションのディスパッチAPIを取得するためのAPIを取得する
- 25. Azure ML Webサービス+ Pandasデータフレームを照会するためのPython
- 26. Outlook API - 会議室カレンダーを取得
- 27. Facebook Graph API:会場別イベントを取得
- 28. GoogleカレンダーAPIと会議リンクを取得
- 29. GoogleドライブレストAPIのメタデータスキーマを取得するためのAPIはありますか
- 30. ゲームランキングの結果を得るためのAPIまたはWebサービス?
重複した質問は、ここで解決策を見つけることができます: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
これは実際のエラーではありません。スタックトレース。 –