我有一个使用System.ServiceModel.ServiceHost的现有自托管REST服务(请参阅本页底部的示例:https://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx)
我运行的地址类似于这个httpX:// MyServer:80 / SubFolder / Service.svc。当我们过去常常使用SOAP和REST端点时,Svc终点就在那里。但它现在仅供访问REST端点的客户端使用。我需要保持Url不变以支持现有客户
我想将其切换到Owin自托管站点。但我无法弄清楚如何使路由处理URL的.svc部分并基本上忽略它。
e.g。这很有效 httpX:// MyServer的:80 /子文件夹/服务/ GetTest
这不是 httpX:// MyServer的:80 /子文件夹/ Service.svc / GetTest
我一直在寻找Url重写选项并找到了这些选项,但它们似乎无法解决我的问题。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
(对不起 - 由于Stackoverflow的限制,我无法发布更多关于我所看到的内容的例子)
我的创业就像这样
var server = WebApp.Start<Startup>("httpX://MyServer:80/SubFolder/Service.svc");
我的路由看起来像这样
appBuilder.Map("/api", api =>
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
api.UseWebApi(config);
});
如果我浏览到此设置 http:// MyServer:80 / SubFolder / Service.svc / api / Test我得到503。
如果我修改为这样并从浏览器中的地址中删除.svc就可以了。
var server = WebApp.Start<Startup>("httpX://MyServer:80/SubFolder/Service");
答案 0 :(得分:0)
所以我终于发现我的问题是我在同一个SubFolder上的IIS中运行了另一个站点,IIS使用https而我的新站点在http上是自托管的,但这导致我有其他问题。
我也通过这样做找到了解决方案
[Route("api/[controller].svc")]
public class ServiceController : ApiController
{
[HttpGet]
public IHttpActionResult Get()
{
return Ok(DateTimeOffset.Now);
}
}
然后添加这些路线
config.Routes.MapHttpRoute(
name: "DefaultWcfWithSvcExt",
routeTemplate: "{controller}.svc/{id}",
defaults: new { id = RouteParameter.Optional });
config.Routes.MapHttpRoute(
name: "DefaultWcf",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);