■96795 / inTopicNo.4) |
Re[2]: ./をURLエンコードする? |
□投稿者/ ぽりたん (2回)-(2021/02/05(Fri) 17:42:14)
|
■No96794 (魔界の仮面弁士 さん) に返信 > 2021/02/05(Fri) 11:40:33 編集(投稿者) > > ■No96783 (ぽりたん さん) に返信 >>データベースを更新する為にWebAPIで更新内容を受けているのですが >>WebAPI側のルート設定を、Master/Insert/{Code1}/{Code2}/ とした時 > > .NET の質問とのことですが、.NET で組まれているのは > サーバーサイド / クライアントサイドのいずれでしょうか。 > あるいはその両方が自作の .NET アプリなのでしょうか。 > > >>たぶん ./ が問題なんでしょうが > > それが原因だとして、URL 中のピリオドをパーセントエンコーディングするために > クライアント側のアプリを修正したいという相談なのか、 > それとも、ピリオドでも受け入れられるよう、サーバー側を > 修正したいという質問なのか、分かりませんでした。 > > どちらにせよ、アプリの構成がどうなっているか分からない事には、 > どう修正すべきかアドバイスすることも難しいです。 > > >>WebAPI側のルート設定を、Master/Insert/{Code1}/{Code2}/ とした時 > > WebAPI のフレームワークが分かりませんが、 > とりあえずこんなコードを書いてみたところ、 > ブラウザーからの > https://localhost/Master/Insert/hogeINC./hogehoge/ > や、コマンドラインからの > curl https://localhost/Master/Insert/hogeINC%2E/hogehoge/ > curl https://localhost/Master/Insert/hogeINC./hogehoge/ > のいずれにおいても、ピリオド付きの ["hogeINC.","hogehoge"] が得られることを確認しています。 > > > using Microsoft.AspNetCore.Mvc; > using System.Collections.Generic; > namespace Wankuma96783.Controllers > { > [ApiController] > public class MasterController : ControllerBase > { > [HttpGet("/Master/Insert/{code1}/{code2}/")] > public IEnumerable<string> Insert(string code1, string code2) > { > return new string[] { code1, code2, }; > } > } > }
初期の説明が雑ですいませんでした 環境としましては自作のandroidアプリで入力されたデータcode1とcode2をURL化してURLエンコードを施した後に MVCで自作したWebAPIに投げてcode1とcode2のデータを取得後SQLSERVERにINSERTしています。
上記で上手くいっていたのですが、code1にとある会社名(HogeINC.)と入力された時 リソースが見つかりませんでした。のエラーが発生しました。 調査しましたところ./がWebSurfer様が書かれている通りフォルダを見に行くことになっている?ようで エラーが発生しているように思えました。 実際にピリオドを除外するとエラーは発生しなくなりました。
という事で魔界の仮面弁士様のレス↓は現環境にばっちり当てはまっていました。
> WebAPI のフレームワークが分かりませんが、 > とりあえずこんなコードを書いてみたところ、 > ブラウザーからの > https://localhost/Master/Insert/hogeINC./hogehoge/ > や、コマンドラインからの > curl https://localhost/Master/Insert/hogeINC%2E/hogehoge/ > curl https://localhost/Master/Insert/hogeINC./hogehoge/ > のいずれにおいても、ピリオド付きの ["hogeINC.","hogehoge"] が得られることを確認しています。 > > > using Microsoft.AspNetCore.Mvc; > using System.Collections.Generic; > namespace Wankuma96783.Controllers > { > [ApiController] > public class MasterController : ControllerBase > { > [HttpGet("/Master/Insert/{code1}/{code2}/")] > public IEnumerable<string> Insert(string code1, string code2) > { > return new string[] { code1, code2, }; > } > } > }
ですが同じようにプログラミングをしているはずなのに なぜかピリオド付きのみ得られないのです。
public class MasterController : ApiController { [HttpGet] [Route("Master/Insert/{strCode1}/{strCode2}")] public IEnumerable<clsMaster.mDropDownItem> F_listInsMaster(string strCode1, string strCode2) {
Code1とCode2データをSQLSERVERにINSERT clsMaster.mDropDownItem obj = new clsMaster.mDropDownItem(); obj.code = "Code1"; obj.state = "State1"; listM.Add(obj);
return listM; } }
VisualStudio2017から実行してhttps://localhost/Master/Insert/hogeINC./hogehoge/を投げると やっぱりリソースが見つかりませんでした。のエラーが発生します。 ピリオドを除外すると上記の関数に到達して正しく処理は実行されます。
色々調べましたところ環境によってピリオドが取得できない?ような事象もあるみたいでした。 (web.config?)
|
|