使用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;
您可以将参数添加到Url中。操作方式如下:
Url.Action("GetByList", "Listing", new { name = "John"})
如果您在主页控制器上,那么您已经知道控制器名称了,不是吗?
但要回答您的问题,获取控制器和操作名称的方法是从routeData
:中获取
RouteData rd = ViewContext.RouteData;
var controllerName = rd.GetRequiredString("controller");
var actionName = rd.GetRequiredString("action");