ミドルウェア階層に問題があります。私はASP.NET Core API変更ミドルウェア階層
[Route("api/v1/values")]
public class ValuesController : Controller
{
// GET api/v1/values/5
[HttpGet("{id}")]
public async Task<IActionResult> Get(string id)
{
return await Task.Run<IActionResult>(() =>
{
if (id == "nf")
{
return NotFound();
}
return Ok($"value: {id}");
});
}
}
Iが一致した場合、MVCを使用するか、そうでない場合は、応答にデフォルトを書き込むようにルーティングを設定し、一方のコントローラ/アクションで非常に単純なWeb APIを作成しました。
app.UseMvc();
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Default");
});
そして、あなたは、サンプルのリクエスト/レスポンス見ることができるの下に、これは、素晴らしい作品:
/api/v1/values/1 -> 200, Body: "value: 1"
/api/v1/values/nf -> 404
/api/v1/values -> "Default"
グレートを、その後私はApiVersioningを追加しましたので、コントローラは次のようになります。
[ApiVersion("1")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : Controller
とスタートアップ:services.AddApiVersioning();
に追加しました。それは完全にルーティングを中断し、各リクエストごとに私は最後のapp.Useを削除したときに応答 "Default"を取得します。ルーティングは値のコントローラーで正常に動作しますが、デフォルトのミドルウェアはありません。前回と同じように私はどのように回答を得ることができますが、ApiVersioningで知っていますか?
リクエストから 'v1'を削除するとデフォルトのミドルウェアに当たっていますか?例えば'/ api/values' – Brad
apiのバージョニングがなければ、デフォルトのミドルウェアを使用します。私は何を要求しても、それは常にデフォルトのルーティングにヒットしています。 – us3r