属性ベースのルーティングであるWebAPI 2.2を使用しています。なぜクエリ文字列が機能しないのか、またはそれらを有効にする方法がわかりません。私はこれに関する他のSOの質問を読んだが、彼らは私にあまり適用されなかった。WebAPI 2.2、属性ベースのルーティングとクエリ文字列
ここでは本当に簡単APIControllerです:私はhttp://localhost/api/HelloMessage/1でそれをヒットした場合、それは、
[Route("api/HelloMessage")]
public async Task<IHttpActionResult> Get()
{
var result = await Task.FromResult(new string[] { "Hello", "World" }).ConfigureAwait(false);
return Ok(result);
}
[Route("api/HelloMessage/{id}")]
public async Task<IHttpActionResult> Get(int id)
{
var result = await Task.FromResult($"Hello {id}").ConfigureAwait(false);
return Ok(result);
}
(また、WebApiConfig.csに行き、そしてMapHttpRouteで作成されたデフォルトルートをコメントアウト)
よく働く。
しかし、http://localhost/api/HelloMessage?id=1でヒットした場合、それはパラメータなしバージョンにバインドされます。どこが間違っていますか?
一つ奇妙なこと:
I再度有効MapHttpRouteコードであれば、その後、ルーティング作品(そのパラメータ化メソッドへのid = 1つのルート?)。
私はwoudlがなぜ属性ベースのルーティングで動作しないのか知りたいのですが。これはバグですか、それとも間違っているのですか?
ここでそれを動作させるだろうMapHttpRouteコードです:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
ありがとうございます。私は、HttpMapRoute()で得られる動作が、属性ベースのルーティングで得られる動作と大きく異なることは、本当に奇妙なことです。私は彼らがなぜ彼らの機能を変えたのだろうと思います。 – JMarsch
私はどこかで、MVCとWeb APIのフレームワークに取り組んでいるチームが違っていると読んでいます。彼らは同様の機能を共有しているかもしれませんが、フードの下ではそれは異なって開発されました。最終的にvNextバージョンの共通バージョンにマージされ、最終的にaspドットネットコアとなりました。 – Nkosi