2

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 コードが終了した後に発生していると思います。

この動作を停止するにはどうすればよいですか?

4

2 に答える 2