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

本文关键字:添加 URI 操作 UriBuilder 控制器 使用 | 更新日期: 2023-09-27 18:27:05

我试图在某个操作后创建一个Url,该Url应该指向不同的控制器和操作。我还需要包括一些参数,以便它们为目标控制器提供所需的信息。假设我有一个控制器,叫做

DoWorkController.cs

和Action

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;

我希望它提取控制器名称和操作名称,并将其分配给生成器,然后添加参数,我不知道如何做到这一点。建议??

编辑

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

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;

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

您可以将参数添加到Url中。操作方式如下:

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

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

但要回答您的问题,获取控制器和操作名称的方法是从routeData:中获取

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