DefaultHandler
を上書きするのではなく、コレクションに追加してみてください。以下は、バージョン1.1.2で私のために働い:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ... other configuration
app.UseMvc(routes =>
{
routes.Routes.Add(new HostPropagationRouter(routes.DefaultHandler));
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// ... other configuration
}
ここでは、ルータは単に完全を期すため、です。
public class HostPropagationRouter : IRouter
{
readonly IRouter router;
public HostPropagationRouter(IRouter router)
{
this.router = router;
}
public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
if (context.HttpContext.Request.Query.TryGetValue("host", out var host))
context.Values["host"] = host;
return router.GetVirtualPath(context);
}
public Task RouteAsync(RouteContext context) => router.RouteAsync(context);
}
それはうまくいきましたが、私はそれがなぜより良いのか理解してもらいたいと思います。 'IRouteBuilder.Routes'と' IRouteBuilder.DefaultHandler'が 'MapRoute'で作成されたルートと相互にやり取りする方法について説明したり、ドキュメントを指したりできますか? –
@EdwardBreyあなたの質問にはっきりと答えるだけでは不十分です。しかし、私は行動の変化が[このバグ修正に関する](https://github.com/aspnet/Routing/issues/370)であることを知っています。渡された値が適切に行を渡されていませんでした。 –