2017-07-24 86 views
0

我有一個使用System.ServiceModel.ServiceHost的現有自託管REST服務(請參閱本頁底部的示例:https://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspxOwin自託管服務映射.svc到web api路由(忽略url中的.svc)

我有一個類似於這個httpX:// MyServer:80/SubFolder/Service.svc的地址。歷史上,當我們過去使用SOAP和REST端點時,Svc的終點就在那裏。但現在它只被訪問REST端點的客戶端使用。我需要保持Url不變以支持現有客戶端

我想將其切換到Owin自託管網站。但我不知道如何使路由處理URL的.svc部分,並基本上忽略它。

例如這個工程 httpX:// MyServer的:80 /子文件夾/服務/ GetTest

這不 httpX:// MyServer的:80 /子文件夾/ Service.svc/GetTest

我一直在尋找網址重新編寫選項並找到這些選項,但它們似乎沒有解決我的問題。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

(對不起 - 我不能發表什麼,我看了一下,由於計算器限制更多的例子)

我的啓動是這樣

var server = WebApp.Start<Startup>("httpX://MyServer:80/SubFolder/Service.svc"); 

和我的路由看起來像這樣

appBuilder.Map("/api", api => 
    { 
     var config = new HttpConfiguration(); 
     config.MapHttpAttributeRoutes(); 
     api.UseWebApi(config); 
    }); 

使用此設置,如果我瀏覽到 httpX:// MyServer:80/SubFolder/Service.svc/api/Test I g et a 503.

如果我修改爲這樣,並從瀏覽器中的地址中刪除.svc它的作品。

var server = WebApp.Start<Startup>("httpX://MyServer:80/SubFolder/Service"); 

回答

0

所以,我終於發現,我的問題是,我有其他網站在相同的子文件夾中的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 } 
    );