我想知道是否可以更改Mvc路由以使用基於票據的系統,其中路由是指向值的外部字典的guid字符串。所以我設置像這樣的新路線:我可以停止將路由值添加到查詢字符串的RedirectToAction?
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
越來越重視的網址是什麼?
如果我刪除多餘的部分並刷新頁面,則所有內容都會從票證集合中完美加載。
我想象中的HttpHandler的代碼完成後發生了什麼事。
我該怎麼做才能阻止這種行爲?
這個「return RedirectToAction(action,controller,new {ticketid = ticket.Id});」追加到URL!請使用返回視圖! – Fals