Owin Self Hosted Service Map .svc to web api route(忽略网址中的.svc)

时间:2017-07-24 23:12:38

标签: c# owin

我有一个使用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");

1 个答案:

答案 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 }
    );