asp.net-mvc – 从Api控制器内生成绝对的url to action

我使用asp.net mvc4和我在“controller1”这个动作:
[HttpGet]
    public async Task<string> Action1()
    {
        try
        {
            HttpClient cl = new HttpClient();
            string uri = "controller2/action2";
            HttpResponseMessage response = await cl.GetAsync(uri);
            response.EnsureSuccessstatusCode();
            return response.ToString();
        }
        catch
        {
            return null;
        }
    }

当我将uri设置为“http:// localhost:1733 / controller2 / action2”时,动作正常,但是不要将uri设置为“controller2 / action2”或“/ controller2 / action2”或“〜/ controller2 / action2”.

如何在没有硬编码uri的情况下写这个动作?

谢谢.

解决方法

使用:
string uri = Url.Action("Action2","Controller2",new {},Request.Url.Scheme);

更新:

由于您使用API​​控制器并需要为常规控制器生成Url,所以您必须使用:

string uri = this.Url.Link("Default",new { controller = "Controller2",action = "Action2" });

其中Default是在注册路由集合中定义的路由的名称,或者如果您已经为此操作创建了特定路由,请使用其名称和新{}作为第二参数.

对于MVC版本4,请在〜/ App_Start / RoutesConfig.cs检查您注册的路由.对于MVC版本3,请在您的Global.asax中检查您的RegisterRoutes方法.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....