2016-02-10 32 views
0

對於我正在開發的這個當前項目,我們需要實現一個web api。它需要住在現有的webforms項目中。規格說我們需要使用Owin。Owin Web Api在現有項目中,停止捕獲所有請求

因此,使用接線就緒後:Microsoft.Owin,Microsoft.Owin.Host.SystemWeb,Microsoft.Owin.Hosting,Microsoft.Owin.Security

與OwinStartupAttribute一個適當的啓動類。 帶Windsor IOC容器的app.UseWebApi。 Web api似乎按預期工作。

除了所有對現有網站的請求也通過webapi。

多一點解釋。 我們需要一個LanguageMes​​sageHandler:DelegatingHandler。在設置好這個類之後,我們開始注意到,即使在我們沒有請求webApi相關的任何東西時,SendAsync的斷點也會被捕獲。

舊網站甚至不應該有關於這個處理程序的知識。

有點代碼澄清:

的startupclass:

[assembly: OwinStartupAttribute(typeof(Startup))] 
public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var container = ((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container; 


     app.UseWebApi(container); 


    } 
} 

的UseWebApi擴展:

public static void UseWebApi(this IAppBuilder app, IWindsorContainer container) 
    { 
     var config = new HttpConfiguration 
     { 
      DependencyResolver = new WindsorDependencyResolver(container) 
     }; 

     //Web API Routes 
     config.MapHttpAttributeRoutes(); 


     //Default to json when requested by browser 
     config.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); 

     //Add language handler 
     config.MessageHandlers.Add(new LanguageMessageHandler()); 


     //Ensure initialized 
     config.EnsureInitialized(); 

     //Start WebApi 
     app.UseWebApi(config); 
    } 

所以現在我們正試圖弄清楚爲什麼所有的請求被處理LanguageMes​​sageHandler,而不僅僅是針對webApi的請求。

一個例子路線:

[RoutePrefix("api/dossier")] 
public class AdministrationsController : ApiController 
{ 
    //GET 
    [Route("{idtype}_{id}/administrations/planned/")] //?limit={maxdate}&nursingunit={nuid} 
    [HttpGet] 
    public IHttpActionResult Planned(string idtype, int id, [FromUri] int maxdate = 6, [FromUri] int? nuid = null) 
    { 
     return Ok(); 
    } 
} 

回答

0

通過使用過濾器,而不是一個消息處理程序固定。 錯誤地認爲消息處理程序將在管道中路由後執行。