我已经在我的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被设置为域内的应用程序:
我概率地忽略了一些明显的东西,但我不确定是什么。如何摆脱那双/api/
?
答案 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/
希望有足够的信息给你。