使用UriBuilder将控制器/操作添加到URI

时间:2013-08-08 15:07:17

标签: c# asp.net-mvc-4 uri

我正在尝试在某个操作后创建一个Url,这个url应指向不同的控制器和操作。我还需要包含一些参数,以便为目标控制器提供所需的信息。所以我想说我有一个名为的控制器:

DoWorkController.cs

和行动

public void Add(params...){..}

我在我的主页控制器中使用UriBuilder:

UriBuilder builder = new UriBuilder();
builder.Host = System.Web.HttpContext.Current.Request.Url.Host;
builder.Port = System.Web.HttpContext.Current.Request.Url.Port;
//got stuck here        
Uri ret = builder.Uri;
return ret;

我希望它拉出控制器名称和操作名称并将其分配给构建器然后添加参数,我不知道如何执行此操作。建议??

修改

我解决了路径到控制器到操作的问题,我仍然坚持在网址中添加参数。

UriBuilder builder = new UriBuilder();
builder.Host = System.Web.HttpContext.Current.Request.Url.Host;
builder.Port = System.Web.HttpContext.Current.Request.Url.Port;
string path;
if (operation == 1)
    path = Url.Action("Add", "DoWork");
else if(operation ==2)
    path = Url.Action("Delete", "DoWork");
else
    throw new ArgumentException("Operation is neither Add or Delete");
if (path != null)
{
    builder.Path = path;
}
Uri ret = builder.Uri;

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式向Url.Action添加参数:

Url.Action("GetByList", "Listing", new { name = "John"})

答案 1 :(得分:0)

如果您在主页控制器上,那么您已经知道控制器名称,不是吗?

但是要回答你的问题,获取控制器和动作名称的方法是从routeData获取它:

RouteData rd = ViewContext.RouteData;
var controllerName = rd.GetRequiredString("controller");
var actionName = rd.GetRequiredString("action");