API网址需要" / api / api /"发表后

时间:2018-03-15 15:24:11

标签: c# asp.net .net api

我已经在我的localhost上启动并运行了一个API应用程序。它在en端点工作得很好,例如:

http://localhost:26307/api/ModelName/12345

但是,在部署到测试服务器之后,需要使用相同的URL:

http://v10test.mydomain.com/api/api/ModelName/12345

我试图摆脱双/ api /。

我调整了路线 FROM THIS (例如):

config.Routes.MapHttpRoute(
    name: "route2",
    routeTemplate: "api/{controller}/{organizationSys}"
);

到这个 .....

config.Routes.MapHttpRoute(
    name: "route2",
    routeTemplate: "{controller}/{organizationSys}"
);

注意:我删除了" api /"来自路线。

但这似乎没有效果。在IIS中,api被设置为域内的应用程序:

enter image description here

我概率地忽略了一些明显的东西,但我不确定是什么。如何摆脱那双/api/

2 个答案:

答案 0 :(得分:1)

这是因为它在IIS中的部署方式。对于IIS,您的应用程序位于地址

http://v10test.mydomain.com/api/

然后是所有控制器等等。如果你将它部署到(例如)

http://v10test.mydomain.com/myapp/

调用将像

一样工作

http://v10test.mydomain.com/myapp/api/ModelName/12345

修改

另外 - 检查控制器内部控制器或方法的路径。这是可以修改/扩展路线的另一个地方。

答案 1 :(得分:1)

有几种方法可以指定控制器操作的路由,并且优先顺序很重要。

首先,它可以从一般配置完成,例如,你已经完成了......

config.Routes.MapHttpRoute(
    name: "route2",
    routeTemplate: "{controller}/{organizationSys}"
);

但是,可以通过在控制器上指定Route属性或通过在动词属性中指定路径来覆盖它。例如,在下面的代码中......

[Route("api/[controller]/[action]")]
public class TestController : Controller
{
    [HttpGet]
    [Route("/api")]  // url... /api
    [Route("/api/test")] // url... /api/test
    [Route("testalso")] // url... /api/test/get/testalso
    public string Get()
    {
        return "Alive";
    }

    [HttpGet("/api/echo/{id}")] // url... /api/echo/{id}
    public string Echo(string id)
    {
        return $"Get Echo: {id}";
    }

    [HttpPost("{id}")]  // url... /api/test/postit/{id}
    public string PostIt(string id)
    {
        return $"Thanks for {id}";
    }
}

控制器上的声明指定控制器内所有方法的默认值,任何指定属性的方法都可以通过使用“/”启动路径或附加到控制器的路径来覆盖控制器。有关示例,请参阅上面每个属性旁边的注释。

除此之外,路由将相对于您的案例中iis中托管的基本应用程序,从...开始。

http://v10test.mydomain.com/api/

希望有足够的信息给你。