ASP.NET Web API 2.1 を使い始めたところ、制限が発生しました。属性ルーティングを使用すると、次のことができます。
[Route("item/{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
URL/item/5
はこのアクションにルーティングされますが、 の制約により、URL はルーティングされ/item/abc
ません。int
{id:int}
id
クエリ パラメーターに対するルート制約の使用がドキュメントで言及または実証されていないにもかかわらず、パラメーターがその制約と共にクエリ文字列に含まれるように URL を変更しようとしました。
[Route("item?{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
今実行しようとすると、 のConfigure
メソッド呼び出しでエラーが発生しApplication_Start
ます。
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
メッセージは次のとおりです。
ArgumentException はユーザー コードによって処理されませんでした
ルート テンプレートは、'/' または '~' 文字で始めることはできません。また、'?' を含めることもできません。キャラクター。
これについては、2 つのことが気になります。
まず、 MSDNのルート プレフィックスについて説明しているセクション~
では、ルート テンプレートの先頭に文字を配置しても問題ないことを明確にしています。試してみましたが、ドキュメントどおりに動作します。
次に、これが気に入らない場合、クエリ パラメータにルート制約を設定するにはどうすればよいですか? ルート制約を削除して、次のことを検討してください。
[Route("item")]
public IHttpActionResult GetItem(int id)
{
...
}
URLは-に設定さ/item/5
れたこのアクションにルーティングされますが、に設定された URL もルーティングされます。id
5
/item/abc
id
0
クエリ パラメーターにルート制約を設定する方法はありませんか?