Mvc ルーティングを変更して、ルートが値の外部辞書への GUID 文字列であるチケット ベースのシステムを使用できるかどうかを確認しようとしています。だから私は次のように新しいルートを設定します:
routes.Add(new Route("{ticketid}", new Shared.TicketRouteHandler()));
そして、新しいルート ハンドラーを作成しました。
public class TicketRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new TicketHttpHandler(requestContext);
}
}
そして、新しい HttpHandler クラス。このProcessRequest
メソッドでは、コントローラーとアクションの値をチケットから読み取り、それらをルート データ コレクションに配置します。
string ticketidString = this.Request.RouteData.GetRequiredString("ticketid");
var ticket = Shared.Ticket.GetTicket(ticketId);
foreach (var item in ticket)
{
Request.RouteData.Values[item.Key] = item.Value;
}
コントローラーはそこから通常どおり実行されます。
コントローラーで ticketid パラメーターを探し、見つからない場合はパラメーターを作成し、RedirecToAction を実行して、新しいチケットにコントローラー/アクションの値を入力します。
public ActionResult Index(Guid? ticketid)
{
var ticket = Shared.Ticket.GetOrCreateTicket(ticketid);
if (ticketid == null)
{
//push the new values into the ticket dictionary instead of the route
string controller = "Home";
string action = "Index";
ticket.SetRoute(controller, action);
return RedirectToAction(action, controller, new { ticketid = ticket.Id });
}
return View();
}
これはすべて正常に機能しています。問題は、リダイレクト アクションから作成された URL が次のようになっていることです。
http://localhost:49952/df3b9f26-6c1c-42eb-8d0d-178e03b7e6f6?action=Index&controller=Home
?action=Index&controller=Home
が URL に添付されているのはなぜですか?
余分な部分を削除してページを更新すると、チケット コレクションからすべてが完全に読み込まれます。
HttpHandler コードが終了した後に発生していると思います。
この動作を停止するにはどうすればよいですか?