グループの値に応じてコントローラーを作成したいので、次のルートがあります。
routes.MapRoute(
name: "Default",
url: "{group}/{action}",
defaults: new { group = "Default", action = "Index" }
).RouteHandler = new MyRouteHandler();
次の routehandler と httphandler を使用:
public class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHttpHandler(requestContext);
}
}
public class MyHttpHandler : IHttpHandler
{
RequestContext _requestContext;
public MyHttpHandler(RequestContext requestContext)
{
_requestContext = requestContext;
}
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
var groupName = _requestContext.RouteData.GetRequiredString("group");
// Select the controller, e.g. Home:
_requestContext.RouteData.Values.Add("controller", "Home");
IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(_requestContext, "Home");
if (controller != null)
{
controller.Execute(_requestContext);
}
}
}
これはすべて機能しますが、ページに @Html.ActionLink("Index", "Index") を配置すると、次のリンクが生成されます。
[a href="/?controller=Home"]インデックス[/a]
Html.ActionLink を使用するときにコントローラー引数が追加される理由を教えてもらえますか? (controller=Home 引数をリンクに追加したくありません。)
どうもありがとうございました!