2013-07-08 16 views

回答

1

如果你正在使用realtive網址,使用提供功能HttpRequest需要完整路徑

string url = GetApplicationPath(HttpContext.Request) + "/aaaa/bbb?c=5"; 
var request = new HttpRequest(null, url, ""); 
var response = new HttpResponse(new StringWriter()); 
var httpContext = new HttpContext(request, response); 
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); 
var values = routeData.Values; 

var controller = values["controller"]; //aaaa 
var action = values["action"]; //bbb 

值控制器和行動將在Global.asax取決於,路線設置,如果你有以下設置

前面加上 application path
routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

輸出將是

var controller = values["controller"]; //aaaa 
var action = values["action"]; //bbb 

但是你已經設置爲

routes.MapRoute(
    "Default", // Route name 
    "{action}/{controller}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

輸出將被

var controller = values["controller"]; //bbb 
var action = values["action"]; //aaaa 

添加一個效用函數功能

private string GetApplicationPath(HttpRequestBase request) 
{ 
    var path = request.Url.Scheme + "://" + request.Url.Host; 
    if (request.ApplicationPath != @"/") 
    { 
     path += request.ApplicationPath; 
    } 
    if (!path.EndsWith(@"/")) 
    { 
     path += "/"; 
    } 
    return path; 
} 
相關問題